代码之家  ›  专栏  ›  技术社区  ›  WISHY

从共享意图选择器中获取选定的应用程序名称?

  •  3
  • WISHY  · 技术社区  · 7 年前

    在我的应用程序中,我可以选择共享数据。我想得到用户选择的共享内容的应用程序名。 从API 21开始,可以借助意图发送者

    下面是我的共享代码

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

    我创建了一个接收者并在清单中声明。下面是接收器代码

    public class AppChooserReceiver 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();
            }
        }
    }
    }
    

    我在onreceive中得到了意图,但是keyset总是空的。有什么我漏掉的吗。

    0 回复  |  直到 7 年前
        1
  •  0
  •   M Risnawan Budianto    6 年前

    谢谢你的源代码,我试着添加了

    <receiver android:name="AppChooserReceiver" android:exported="false"/> 
    

    在AndroidManifest。我得到了应用程序名