How to tell which app was selected by Intent.createChooser?

前端 未结 5 857
囚心锁ツ
囚心锁ツ 2020-11-29 05:26

Code:

Intent launchIntent = new Intent(Intent.ACTION_MAIN);
launchIntent.addCategory(Intent.CATEGORY_HOME);
Intent chooser = Intent.createChooser(launchInten         


        
5条回答
  •  离开以前
    2020-11-29 05:49

    I did in different way, no need to implement custom component:

    Send Intent:

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "My feature text");
    sendIntent.setType("text/plain");
    Intent receiver = new Intent(this, ApplicationSelectorReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
    Intent chooser = Intent.createChooser(sendIntent, null, pendingIntent.getIntentSender());
    startActivity(chooser);
    

    Add BroadcastReceiver ApplicationSelectorReceiver.class in manifest.

    
    

    ApplicationSelectorReceiver.java

    public class ApplicationSelectorReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            for (String key : Objects.requireNonNull(intent.getExtras()).keySet()) {
                try {
                    ComponentName componentInfo = (ComponentName) intent.getExtras().get(key);
                    PackageManager packageManager = context.getPackageManager();
                    assert componentInfo != null;
                    String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(componentInfo.getPackageName(), PackageManager.GET_META_DATA));
                    Log.i("Selected Application Name", appName);
                } catch (Exception e) {
                    e.printStackTrace();
                }    
            }
        }
    }
    

    Result:

    Gmail
    Facebook
    Hangouts
    Instagram
    Drive
    

    Hope this would help others.

提交回复
热议问题