studio putextra intent intenciones desde boton activity abrir android android-intent

android - putextra - ¿Cómo saber qué intento se selecciona en Intent.ACTION_SEND?



intentfilter android (4)

Con la gran respuesta de Tomik, puedo crear mi propia lista de recursos compartidos personalizada utilizando PackageManager loadLabel y LoadIcon:

public class MainActivity extends FragmentActivity { ArrayList<Drawable> icons; ArrayList<String> labels; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); setContentView(R.layout.activity_main); icons=new ArrayList<Drawable>(); labels=new ArrayList<String>(); PackageManager manager=getPackageManager(); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); List<ResolveInfo> activities=manager. queryIntentActivities(intent,0); for(int i=0;i<activities.size();i++) { ApplicationInfo appInfo=null; try { appInfo=manager.getApplicationInfo(activities.get(i).activityInfo.packageName,0); labels.add(name=appInfo.loadLabel(getPackageManager()).toString()); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } icons.add(appInfo.loadIcon(getPackageManager())); } } }

Quiero usar Android Intent.ACTION_SEND para compartir algo rápidamente. Así que tengo una lista para compartir como esta:

Pero quiero compartir contenido diferente para cada acción, como:

  • Si se comparte por correo electrónico / Gmail, el contenido debe ser "Compartir por correo electrónico".

  • Si se comparte por Facebook, el contenido debe ser "Compartir por Facebook".

Entonces, ¿es posible hacer eso?


No estoy seguro si todavía está buscando una respuesta, pero ClickClickClack tiene una implementación de ejemplo de cómo puede interceptar la intención de ACTION_SEND y elegir el nombre del paquete basado en ciertas características y ciertas características que terminan sucediendo. En implica la mayoría de los pasos mencionados por Tomik.

http://clickclickclack.wordpress.com/2012/01/03/intercepting-androids-action_send-intents/

Un aspecto poderoso de esta implementación es que puede agregar análisis a sus llamadas.


No hay un método directo para acceder a este tipo de información ...

Paso 1: En primer lugar, dentro de su código, debe declarar un adaptador que contendrá su vista personalizada de la lista para compartir en ...

//sharing implementation Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); // what type of data needs to be send by sharing sharingIntent.setType("text/plain"); // package names PackageManager pm = getPackageManager(); // list package List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0); objShareIntentListAdapter = new ShareIntentListAdapter(CouponView.this,activityList.toArray()); // Create alert dialog box AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); builder.setTitle("Share via"); builder.setAdapter(objShareIntentListAdapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { ResolveInfo info = (ResolveInfo) objShareIntentListAdapter.getItem(item); // if email shared by user if(info.activityInfo.packageName.contains("Email") || info.activityInfo.packageName.contains("Gmail") || info.activityInfo.packageName.contains("Y! Mail")) { PullShare.makeRequestEmail(COUPONID,CouponType); } // start respective activity Intent intent = new Intent(android.content.Intent.ACTION_SEND); intent.setClassName(info.activityInfo.packageName, info.activityInfo.name); intent.setType("text/plain"); intent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName); intent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+shortURL); intent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+shortURL); ((Activity)context).startActivity(intent); }// end onClick }); AlertDialog alert = builder.create(); alert.show();

Paso 2: Ahora has creado un diseño de inflado para tu adaptador (ShareIntentListAdapter.java)

package com.android; import android.app.Activity; import android.content.pm.ResolveInfo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class ShareIntentListAdapter extends ArrayAdapter{ private final Activity context; Object[] items; public ShareIntentListAdapter(Activity context,Object[] items) { super(context, R.layout.social_share, items); this.context = context; this.items = items; }// end HomeListViewPrototype @Override public View getView(int position, View view, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View rowView = inflater.inflate(R.layout.social_share, null, true); // set share name TextView shareName = (TextView) rowView.findViewById(R.id.shareName); // Set share image ImageView imageShare = (ImageView) rowView.findViewById(R.id.shareImage); // set native name of App to share shareName.setText(((ResolveInfo)items[position]).activityInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); // share native image of the App to share imageShare.setImageDrawable(((ResolveInfo)items[position]).activityInfo.applicationInfo.loadIcon(context.getPackageManager())); return rowView; }// end getView }// end main onCreate

Paso 3: Cree su tipo de diseño xml para mostrar la vista de lista en el cuadro de diálogo (social_share.xml)

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/categoryCell" android:layout_width="match_parent" android:layout_height="30dip" android:background="@android:color/white" > <TextView android:id="@+id/shareName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginBottom="15dp" android:layout_marginLeft="5dp" android:layout_marginTop="15dp" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" android:textStyle="bold" /> <ImageView android:id="@+id/shareImage" android:layout_width="35dip" android:layout_height="35dip" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:contentDescription="@string/image_view" /> </RelativeLayout> // vKj


No se puede obtener dicha información.

A menos que cree su propia implementación del diálogo para la selección de la actividad.

Para crear dicho cuadro de diálogo, debe utilizar PackageManager y su función queryIntentActivities() . La función devuelve List<ResolveInfo> .

ResolveInfo contiene cierta información sobre una actividad ( resolveInfo.activityInfo.packageName ), y con la ayuda de PackageManager puede obtener otra información (útil para mostrar la actividad en el cuadro de diálogo): icono dibujable de la aplicación, etiqueta de la aplicación, ....

Muestre los resultados en una lista en un diálogo (o en una actividad con el estilo de diálogo). Cuando se haga clic en un elemento, cree un nuevo Intent.ACTION_SEND, agregue el contenido que desee y agregue el paquete de la actividad seleccionada ( intent.setPackage(pkgName) ).