oraciones objeto intent indirecto indirecta ejemplos ejemplo con complemento circunstancial activity android android-intent android-pendingintent

android - intent - objeto indirecto ejemplos



Obtiene el objeto IntentSender para el método createChooser en Android (2)

Me gustaría utilizar una nueva versión del método Intent.createChooser que utiliza IntentSender .

La documentación indica solo que puedo PendingIntent instancia PendingIntent . En mi caso, parece que PendingIntent no tendrá otro uso.

¿Hay IntentSender otra forma de obtener IntentSender o necesito crear PendingIntent ?


Otra forma de hacerlo.

/** * Receiver to record the chosen component when sharing an Intent. */ static class TargetChosenReceiver extends BroadcastReceiver { private static final String EXTRA_RECEIVER_TOKEN = "receiver_token"; private static final Object LOCK = new Object(); private static String sTargetChosenReceiveAction; private static TargetChosenReceiver sLastRegisteredReceiver; static boolean isSupported() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1; } @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1) static void sendChooserIntent(Activity activity, Intent sharingIntent) { synchronized (LOCK) { if (sTargetChosenReceiveAction == null) { sTargetChosenReceiveAction = activity.getPackageName() + "/" + TargetChosenReceiver.class.getName() + "_ACTION"; } Context context = activity.getApplicationContext(); if (sLastRegisteredReceiver != null) { context.unregisterReceiver(sLastRegisteredReceiver); } sLastRegisteredReceiver = new TargetChosenReceiver(); context.registerReceiver( sLastRegisteredReceiver, new IntentFilter(sTargetChosenReceiveAction)); } Intent intent = new Intent(sTargetChosenReceiveAction); intent.setPackage(activity.getPackageName()); intent.putExtra(EXTRA_RECEIVER_TOKEN, sLastRegisteredReceiver.hashCode()); final PendingIntent callback = PendingIntent.getBroadcast(activity, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT); Intent chooserIntent = Intent.createChooser(sharingIntent, activity.getString(R.string.share_link_chooser_title), callback.getIntentSender()); activity.startActivity(chooserIntent); } @Override public void onReceive(Context context, Intent intent) { synchronized (LOCK) { if (sLastRegisteredReceiver != this) return; context.getApplicationContext().unregisterReceiver(sLastRegisteredReceiver); sLastRegisteredReceiver = null; } if (!intent.hasExtra(EXTRA_RECEIVER_TOKEN) || intent.getIntExtra(EXTRA_RECEIVER_TOKEN, 0) != this.hashCode()) { return; } ComponentName target = intent.getParcelableExtra(Intent.EXTRA_CHOSEN_COMPONENT); if (target != null) { setLastShareComponentName(context, target); } } }


la intención del objetivo del selector no es PendingIntent . Por ejemplo, en el siguiente fragmento de ACTION_SEND , declaro la intención de ACTION_SEND , con text/plain tipo text/plain , y este es mi objetivo para Intent.createChooser . Luego PendingIntet otra Intent , un receptor y un manejador, el PendingIntet , que invocará en onReceive de mi BroadcastTest después de que uno elija algo del selector.

Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); intent.setType("text/plain"); Intent receiver = new Intent(this, BroadcastTest.class); receiver.putExtra("test", "test"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT); Intent chooser = Intent.createChooser(intent, "test", pendingIntent.getIntentSender()); startActivity(chooser);

Editar :

La información, en el caso de BroadcastReceiver está integrada en la intención que obtienes como parámetro. Después de seleccionar una de las opciones, recuperar los extras de Bundle y usar la clave android.intent.extra.CHOSEN_COMPONENT , debería poder encontrar lo que el usuario eligió.

Intente agregar como simple Log.d a onReceive

for (String key : intent.getExtras().keySet()) { Log.d(getClass().getSimpleName(), " " + intent.getExtras().get(key)); }

En mi ejemplo, tengo

ComponentInfo{org.telegram.messenger/org.telegram.ui.LaunchActivity}

para Telegram y

ComponentInfo{com.google.android.apps.inbox/com.google.android.apps.bigtop.activities.ComposeMessageActivity}

para InBox