Запуск Activity на основе файла в Android - PullRequest
5 голосов
/ 14 июня 2011

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

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

Ответы [ 2 ]

7 голосов
/ 14 июня 2011

Для начала вам необходимо определить тип файла MIME. Вы можете сделать это, используя MimeTypeMap :

MimeTypeMap map = MimeTypeMap.getSingleton();
String extension = map.getFileExtensionFromUrl(url); // url is the url/location of your file
String type = map.getMimeTypeFromExtension(extension);

Затем, когда вы знаете тип MIME, вы можете создать намерение для этого типа:

Intent intent = new Intent();
intent.setType(type);

Наконец, вы хотите проверить, могут ли какие-либо действия разрешить намерение с этим типом. Это можно сделать через PackageManager :

PackageManager manager = getPackageManager(); // I'm assuming this is done from within an activity. This a Context method.
List<ResolveInfo> resolvers = manager.queryIntentActivities(intent, 0);
if (resolvers.isEmpty()) {
  // display error
} else {
  // launch the intent. You will also want to set the data based on the uri of your file
}
0 голосов
/ 14 июня 2011

На основании ...

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

Я думаю, что вы хотите PackageManager.queryIntentActivities где вы создаете намерение на основе целевого файла, а затем читаете возвращенный список.

...