Как заставить класс вести себя как приложение?

Я сделал средство просмотра изображений, которое имеет 3 действия:

1) Основной: где я ищу файлы, используя регулярное выражение для имен файлов. Результатом является ArrayList с именем «файлы», который отправляется с помощью Extras в...

2) Thumbs: Через Extras он получает имена файлов и показывает сетку с миниатюрами (уже сохраненными локально). Когда вы нажимаете миниатюру, позиция и «файлы» отправляются в...

3) Фото: показывает файлы (положение) в полноэкранном режиме.

Теперь я хочу сделать «Фото» средством просмотра изображений по умолчанию. Я знаю, как вызвать класс из другого приложения. Но можно ли сделать «Фото» средством просмотра по умолчанию, просто щелкнув изображение, не вызывая все приложение?


person Luis A. Florit    schedule 13.11.2012    source источник
comment
без вызова всего приложения? - я не понимаю вопроса, что вы имеете в виду?   -  person Squonk    schedule 13.11.2012
comment
@Скуонк: Да. Пожалуйста, смотрите ответ ниже.   -  person Luis A. Florit    schedule 14.11.2012


Ответы (1)


В своем манифесте под действием средства просмотра изображений «Фото» добавьте следующий фильтр намерений:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="image/*" />
</intent-filter>

Вам нужно будет получить URI изображения из намерения его отобразить.

person dymmeh    schedule 13.11.2012
comment
Когда я нажимаю на изображение, я все равно получаю No application can perform this action (я отключил приложение "Галерея"). Более того, я получил предупреждение о файле манифеста: Exported activity does not require permission. - person Luis A. Florit; 13.11.2012
comment
Я забыл категорию. Попробуйте обновленный XML с добавленной категорией. вы можете запретить экспорт своей активности, установив «android:exported=false» в теге «активность» - person dymmeh; 13.11.2012
comment
Отлично, теперь это выглядит живым... Еще один вопрос, пожалуйста: как мне получить URI изображения из намерения его отобразить? Я попытался добавить метод public Photo(Uri uri) { ... } в класс Photo, но безуспешно... Большое спасибо!! - person Luis A. Florit; 13.11.2012
comment
В вашей активности, которая открывается в onCreate/onResume (практически в любом месте активности), вы можете вызвать Uri uri = getIntent().getData(); и это даст вам URI изображения - person dymmeh; 13.11.2012
comment
Две проблемы: во-первых, штука вылетала с Permission denial исключением из-за отсутствия экспорта. Поэтому я удалил строку и сохранил предупреждение. Но, по крайней мере, теперь я что-то получаю. Проблема в том, что я получаю в качестве uri.getPath() следующее: /external/images/media/119275. Не существует даже каталога /external! :( Но хоть Фото открывается без ошибок. Спасибо за терпение... - person Luis A. Florit; 13.11.2012
comment
Как вы пытаетесь отобразить изображение? - person dymmeh; 13.11.2012
comment
С img.setImageBitmap(new BitmapFactory.decodeFile(filename)), где img это TouchImageView. Штука открывается, но проблема в том, что путь uri неверный. Не знаю, почему... - person Luis A. Florit; 13.11.2012
comment
Предоставленный вам Uri не является Uri пути к файлу. Это Uri, который следует использовать с поставщиками содержимого (базами данных). Попытка вызова img.setImageURI(uri); - person dymmeh; 14.11.2012
comment
Смешной. Для некоторых изображений это работает. Эти изображения имеют uri file://.... Некоторые изображения не работают, и у них есть uris типа content://media/external/images/media/119289. Тем не менее, папка содержит только файлы JPEG ... Может быть, приложение «Мои файлы» отправляет неверные данные в мое приложение, когда я нажимаю на изображение ?? РЕДАКТИРОВАТЬ: Мммм... Понятно... Попробую. БЛАГОДАРНОСТЬ!!!!!!!!! - person Luis A. Florit; 14.11.2012
comment
Кстати, чтобы исправить предупреждение, я использовал это: [stackoverflow.com/a/12217347/1483390] - person Luis A. Florit; 14.11.2012