Получить выбранное имя приложения из средства выбора общего доступа? - PullRequest
0 голосов
/ 06 июля 2018

В моем приложении у меня есть возможность поделиться данными. Я хочу получить имя приложения, которое пользователь выбрал для обмена контентом. В API 21 это возможно с помощью Intent Sender

Ниже мой код акции

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, но набор ключей всегда нулевой. Есть ли что-то, что я пропустил.

1 Ответ

0 голосов
/ 10 июля 2019

спасибо за исходный код, я попробовал и добавил

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

в AndroidManifest.и я получаю название приложения

...