Скрыть свое скрытое намерение из списка акций

Приложение Twitter для Android имеет (как минимум) два фильтра намерений. Один для твиттера и один для прямых сообщений.

Когда вы хотите поделиться чем-то через твиттер (из другого приложения), вы обычно видите оба элемента в списке неявных намерений (как на первом изображении ниже).

Поделиться в Twitter из другого приложения, например Хром

Когда вы хотите поделиться чем-то из приложения Twitter, вы получаете то же самое намерение, но только с одной опцией (для прямого сообщения). Другие варианты как-то удалены. Смотрите второе изображение для справки.

Поделиться с Twitter

Мои вопросы, как приложение Twitter делает это?

Я полагаю, что они запрашивают приложения, которые могут обрабатывать контент, удаляют оттуда свои собственные намерения (Tweet) и показывают результаты в пользовательском BottomSheet. Я считаю, что это так, потому что анимация выхода BottomSheet немного отличается от стандартной анимации Share BottomSheet в других приложениях.

Если это не так, есть ли другой способ отфильтровать ваши собственные намерения в вашем приложении?

1 ответ

Попробуйте это для обмена через приложения, которые вы хотите показать в диалоге

public void onShareClick(View v){
List<Intent> targetShareIntents=new ArrayList<Intent>();
Intent shareIntent=new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
List<ResolveInfo> resInfos=getPackageManager().queryIntentActivities(shareIntent, 0);
if(!resInfos.isEmpty()){
    System.out.println("Have package");
    for(ResolveInfo resInfo : resInfos){
        String packageName=resInfo.activityInfo.packageName;
        Log.i("Package Name", packageName);
        if(packageName.contains("com.twitter.android") || packageName.contains("com.facebook.katana") || packageName.contains("com.kakao.story")){
            Intent intent=new Intent();
            intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name));
            intent.setAction(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT, "Text");
            intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
            intent.setPackage(packageName);
            targetShareIntents.add(intent);
        }
    }
    if(!targetShareIntents.isEmpty()){
        System.out.println("Have Intent");
        Intent chooserIntent=Intent.createChooser(targetShareIntents.remove(0), "Choose app to share");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{}));
        startActivity(chooserIntent);
    }else{
        System.out.println("Do not Have Intent");
        showDialaog(this);
    }
}
}
Другие вопросы по тегам