/ / BroadcastReceiver не викликається після createChooser (контекст, намір, IntentSender) виконується - android, android-pendingintent, android-broadcastreceiver, android-intent-chooser

BroadcastReceiver не викликається після того, як createChooser (контекст, намір, IntentSender) виконується - android, android-pendingintent, android-broadcastreceiver, android-intent-chooser

Я хочу, щоб визначити, яку програму вибирає користувач після того, як я його представляю createChooser () . Так що я створив свою BroadcastReceiver такий підклас:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class ShareBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().toString());
}
}

Також я додав свій приймач до свого андроїда маніфест файл:

<application>
...
...
...
<receiver android:name=".helpers.ShareBroadcastReceiver" android:exported="true"/>
</application>

А ось код, який викликає createChooser діалогове вікно:

Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sendIntent.setType("image/png");

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
Log.d("INFORMATION", "The current android version allow us to know what app is chosen by the user.");

Intent receiverIntent = new Intent(this,ShareBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiverIntent, PendingIntent.FLAG_CANCEL_CURRENT);
sendIntent = Intent.createChooser(sendIntent,"Share via...", pendingIntent.getIntentSender());
}
startActivity(sendIntent);

Хоча це явно PendingIntent тому що я використовую ShareBroadcastReceiver ім'я класу безпосередньо без будь-якихintent-filter, мого приймача мовлення не є зворотним викликом відразу після натискання користувачем діалогового вікна вибору, що я роблю неправильно?

Відповіді:

3 для відповіді № 1

У вашому коді все в порядку. Вам потрібно лише змінити один рядок onReceive метод у вашому ShareBroadcastReceiver щоб уловлювати ключ "EXTRA_CHOSEN_COMPONENT" вашого наміру:

Log.d("INFORMATION", "Received intent after selection: "+intent.getExtras().get(Intent.EXTRA_CHOSEN_COMPONENT));

У вашому журналі ви побачите щось подібне (у моєму випадку я вибрав Google Keep):

ComponentInfo{com.google.android.keep/com.google.android.keep.activities.ShareReceiverActivity}