как вы ограничиваете средство выбора намерений, чтобы показывать только определенные приложения?

Цель: я хочу открыть средство выбора намерений, чтобы отображались только родное приложение "Камера" и родное приложение "Галерея".

Что у меня есть сейчас: у меня есть родное приложение "Камера", родное приложение "Галерея" и все другие приложения, которые могут открывать файлы (Astros File Manager, приложение "Фотографии" и т. д.)

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

Спасибо за прочтение и буду признателен за любые комментарии или предложения.

        Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT,null);
        galleryIntent.setType("image/*");
        galleryIntent.setClassName("com.google.android.gallery3d", "com.android.gallery3d.app.Gallery");

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        Intent chooser = new Intent(Intent.ACTION_CHOOSER);
        chooser.putExtra(Intent.EXTRA_INTENT, galleryIntent);
        chooser.putExtra(Intent.EXTRA_TITLE, "Select a Photo");
        Intent[] intentArray =  {cameraIntent};
        chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
        startActivityForResult(chooser,CAMERA_CODE);

person xiaowoo    schedule 12.02.2014    source источник
comment
Не думайте, что вы можете добиться этого каким-либо способом, кроме жестко закодированных пакетов приложений, которые должны отображаться в вашем селекторе. Но эти пакеты могут различаться в разных системах — я имею в виду, что приложения галереи по умолчанию не будут иметь одинаковые пакеты, например, в необработанном Android и Cyanogenmod. Так что лучше оставить все приложения на выбор пользователя   -  person Sam    schedule 13.02.2014
comment
@SamN-a Я жестко запрограммировал название галереи Intent, но оно по-прежнему показывает все приложения (галерея, фотографии, астрономия и т. д.).   -  person xiaowoo    schedule 13.02.2014
comment
Пожалуйста, разрешите пользователю использовать любые приложения, которые он хочет. Если пользователь ненавидит свое приложение камеры по умолчанию и хочет использовать любое из доступных сторонних приложений, это выбор пользователя, а не ваш. Если пользователь хочет использовать приложение в стиле галереи, которое интегрируется с его предпочтительной социальной сетью, это выбор пользователя, а не ваш. Вы не более важны, чем ваши пользователи.   -  person CommonsWare    schedule 13.02.2014


Ответы (1)


Как пишет @SamN-a, это вообще невозможно. Использование жестко закодированных имен классов не является хорошей практикой: нет гарантии, что они будут присутствовать на всех устройствах, даже если вы смотрите только на устройства со стандартными установленными GAPPS.

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

person Alex Cohn    schedule 12.02.2014
comment
Я уже упоминал, что при использовании жестко запрограммированных пакетов возникает множество проблем. Не могли бы вы предоставить несколько примеров кода для пользовательского выбора? - person Sam; 13.02.2014
comment
@SamN-a: взгляните на stackoverflow.com/questions/5734678/ и ссылки на них. - person Alex Cohn; 13.02.2014