Hola, hemos encontrado la respuesta a lo que buscabas, continúa leyendo y la obtendrás un poco más abajo.
Solución:
Comprueba mi respuesta a continuación. Excluirá solo la aplicación de Facebook para compartir.
void shareOnOtherSocialMedia()
List shareIntentsLists = new ArrayList();
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/*");
List resInfos = getPackageManager().queryIntentActivities(shareIntent, 0);
if (!resInfos.isEmpty())
for (ResolveInfo resInfo : resInfos)
String packageName = resInfo.activityInfo.packageName;
if (!packageName.toLowerCase().contains("facebook"))
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name));
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.setPackage(packageName);
shareIntentsLists.add(intent);
if (!shareIntentsLists.isEmpty())
Intent chooserIntent = Intent.createChooser(shareIntentsLists.remove(0), "Choose app to share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentsLists.toArray(new Parcelable[]));
startActivity(chooserIntent);
else
Log.e("Error", "No Apps can perform your task");
}
Y llame a la función anterior donde quiera. Avísame para consultas.
Android N (API 24) presenta la lista negra Intent.EXTRA_EXCLUDE_COMPONENTS, que es mejor y más simple que la lista blanca Intent.EXTRA_INITIAL_INTENTS.
Para la API de Android 24 y superior, puede usar esto:
val components = arrayOf(ComponentName(applicationContext, YourActivity::class.java))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
startActivity(Intent.createChooser(intent, null).putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS,components))
Por lo demás, puede tener esta solución sobre la que escribí (que le permite tener una condición que excluir
Aquí hay una solución más generalizada, para poder elegir cuál excluir para todas las versiones de Android:
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val targetIntent = Intent(Intent.ACTION_SEND)
targetIntent.type = "text/plain"
targetIntent.putExtra(Intent.EXTRA_SUBJECT, "subject")
targetIntent.putExtra(Intent.EXTRA_TEXT, "text")
val excludedAppsPackageNames = hashSetOf( "com.pushbullet.android","com.android.bluetooth","com.google.android.apps.docs","com.google.android.gm")
getIntentChooser(this, targetIntent, "choose!", object : ComponentNameFilter
override fun shouldBeFilteredOut(componentName: ComponentName): Boolean = excludedAppsPackageNames.contains(componentName.packageName)
)?.let startActivity(it)
interface ComponentNameFilter
fun shouldBeFilteredOut(componentName: ComponentName): Boolean
private fun getIntentChooser(context: Context, intent: Intent, chooserTitle: CharSequence? = null, filter: ComponentNameFilter): Intent?
val resolveInfos = context.packageManager.queryIntentActivities(intent, 0)
// Log.d("AppLog", "found apps to handle the intent:")
val excludedComponentNames = HashSet()
resolveInfos.forEach
val activityInfo = it.activityInfo
val componentName = ComponentName(activityInfo.packageName, activityInfo.name)
// Log.d("AppLog", "componentName:$componentName")
if (filter.shouldBeFilteredOut(componentName))
excludedComponentNames.add(componentName)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
return Intent.createChooser(intent, chooserTitle).putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames.toTypedArray())
if (resolveInfos.isNotEmpty())
val targetIntents: MutableList = ArrayList()
for (resolveInfo in resolveInfos)
val activityInfo = resolveInfo.activityInfo
if (excludedComponentNames.contains(ComponentName(activityInfo.packageName, activityInfo.name)))
continue
val targetIntent = Intent(intent)
targetIntent.setPackage(activityInfo.packageName)
targetIntent.component = ComponentName(activityInfo.packageName, activityInfo.name)
// wrap with LabeledIntent to show correct name and icon
val labeledIntent = LabeledIntent(targetIntent, activityInfo.packageName, resolveInfo.labelRes, resolveInfo.icon)
// add filtered intent to a list
targetIntents.add(labeledIntent)
val chooserIntent: Intent?
// deal with M list seperate problem
chooserIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
// create chooser with empty intent in M could fix the empty cells problem
Intent.createChooser(Intent(), chooserTitle)
else
// create chooser with one target intent below M
Intent.createChooser(targetIntents.removeAt(0), chooserTitle)
if (chooserIntent == null)
return null
// add initial intents
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toTypedArray())
return chooserIntent
return null
Aquí puedes ver las reseñas y valoraciones de los usuarios
Al final de todo puedes encontrar las notas de otros usuarios, tú de igual forma tienes el poder dejar el tuyo si te apetece.