2014-02-12 2 views
0

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

То, что я прямо сейчас: У меня есть родной приложение камеры, родное приложение Галерея и все другие приложения, которые могут открывать файлы (Астрос менеджер файлов, фотографий приложение ... и т.д.)

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

Благодарим за внимание и будем благодарны за любые замечания или предложения.

 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); 
+1

Не думайте, что вы можете достичь этого любым способом, кроме пакетов жесткого кодирования приложений, которые должны отображаться в вашем выборе. Но эти пакеты могут различаться в разных системах - я имею в виду, что приложения для галереи по умолчанию не будут иметь одинаковые пакеты в необработанных Android и Cyanogenmod, например. Поэтому лучше оставить все приложения по выбору пользователя – Sam

+0

@ SamN-a Я жестко запрограммировал название галереи Intent, но все еще показывал все приложения (галерея, фотографии, astro..etc). – xiaowoo

+1

Пожалуйста, разрешите пользователю использовать любые приложения, которые пользователь хочет. Если пользователь ненавидит свое приложение камеры по умолчанию и хочет использовать любой из доступных сторонних, это выбор пользователя, а не ваш. Если пользователь хочет использовать приложение в стиле галереи, которое интегрируется с предпочтительной социальной сетью, это выбор пользователя, а не ваш. Вы не важнее, чем ваши пользователи. – CommonsWare

ответ

1

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

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

+0

Я упомянул, что есть много проблем при использовании жестко закодированных пакетов. Не могли бы вы предоставить некоторые образцы кода для пользовательского выбора? – Sam

+1

@ SamN-a: посмотрите http://stackoverflow.com/questions/5734678/custom-filtering-of-intent-chooser-based-on-installed-android-package-name и ссылки на них. –

Смежные вопросы