在我的应用程序中,我可以选择共享数据。我想得到用户选择的共享内容的应用程序名。
从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总是空的。有什么我漏掉的吗。