studio personalizar personalización personalizacion name maximo elegante change app android share

personalización - ¿Cómo personalizar el intento de compartir en Android?



personalización android (4)

Hay una forma de abrir directamente la intención que desea. Puedes obtener la lista de intenciones y abrir solo una.

Vea este código:

private void initShareIntent(String type) { boolean found = false; Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/jpeg"); // gets the list of intents that can be loaded. List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { if (info.activityInfo.packageName.toLowerCase().contains(type) || info.activityInfo.name.toLowerCase().contains(type) ) { share.putExtra(Intent.EXTRA_SUBJECT, "subject"); share.putExtra(Intent.EXTRA_TEXT, "your text"); share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(myPath)) ); // Optional, just if you wanna share an image. share.setPackage(info.activityInfo.packageName); found = true; break; } } if (!found) return; startActivity(Intent.createChooser(share, "Select")); } }

Si quieres abrir Twitter, haz eso:

initShareIntent("twi");

si facebook:

initShareIntent("face");

si correo:

initShareIntent("mail"); // or "gmail"

Si quieres mostrar una lista de intenciones que coincidan con el tipo, sin usar el primer mach, mira esta publicación: Android Intent for Twitter application

Ahora puedo usar el intento de compartir para abrir el diálogo de compartir

Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, link); startActivity(Intent.createChooser(intent, "Share with"));

pero necesito el diálogo para no aparecer y compartir directamente con una red social, por ejemplo (FB o Twitter)

algún consejo sobre cómo hacer eso?


No, no puedes. Los intentos se supone que funcionan de esta manera. Si tiene que forzar el inicio de una aplicación en particular, use intenciones explícitas si las aplicaciones de destino son compatibles. Sin conocer los nombres de los paquetes o los nombres de los componentes de las aplicaciones de destino, o el tipo o tipo de datos mime, no se puede obligar a una aplicación en particular a trabajar en intentos generalizados.


Primero, enumera todas las aplicaciones para compartir.

private java.util.List<ResolveInfo> showAllShareApp() { java.util.List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); Intent intent = new Intent(Intent.ACTION_SEND, null); intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); intent.setType("text/plain"); PackageManager pManager = getPackageManager(); mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); return mApps; }

Luego, selecciona uno

private void share(ResolveInfo appInfo) { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); if (appInfo != null) { sendIntent .setComponent(new ComponentName( appInfo.activityInfo.packageName, appInfo.activityInfo.name)); } sendIntent.setType("text/plain"); // startActivity(Intent.createChooser(sendIntent, "Share")); startActivity(sendIntent); }

Aquí hay un proyecto de muestra. Espero que ayude.


Puede obtener todo el cliente de correo electrónico usando ACTION_SENDTO como

Intent getMailClients = new Intent(Intent.ACTION_SENDTO); getMailClients.setData(Uri.parse("mailto:")); final PackageManager pm = this.getPackageManager(); final List<ResolveInfo> emailsClients = pm.queryIntentActivities(getMailClients, 0); if (emailsClients.size() == 0) { Toast.makeText(this, "There are no email clients installed", Toast.LENGTH_LONG).show(); return; }

y luego crea tu propio selector (diálogo con la lista de aplicaciones fundadas). Cuando el usuario hace clic en el elemento puede hacer algo así.

Intent sendMailIntent = new Intent(Intent.ACTION_SEND); sendMailIntent.setType(some type like text/plain or other you need); ... there you can set SUBJECT,EMAILTO, attach files ... final List<ResolveInfo> matches = pm.queryIntentActivities(sendMailIntent, 0); ResolveInfo sendingProgramm = null; for (final ResolveInfo info : matches) { if (info.activityInfo.packageName.equals(clickedResolveInfo.activityInfo.packageName)) { sendingProgramm = info; sendMailIntent .setClassName(sendingProgramm.activityInfo.packageName, sendingProgramm.activityInfo.name); break; } } startActivity(sendMailIntent);

Tal vez te ayude.