#android
Вопрос:
Я хотел бы запустить приложение «Файлы» из своего приложения. Приложение с этим значком:
Этот приведенный ниже код работает для Android с 9 по 11. В более старых версиях он использовал резервную опцию. Но в Android 12 он не может создать намерение запуска как для com.google.android.documentsui
, так и com.android.documentsui
для . Есть ли обходной путь для этого?
public static void startFilesManager(Context context)
{
try
{
// com.android.documentsui is the Files app on Android 9 and 11.
// com.google.android.documentsui is the Files app in Android 10.
// com.google.android.apps.nbu.files is Google file manager, this is used as fallback.
String[] packages = new String[] {
"com.android.documentsui",
"com.google.android.documentsui",
"com.google.android.apps.nbu.files"
};
Intent intent = null;
for (int i = 0; i < packages.length; i ) {
String packageName = packages[i];
intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if(intent != null) {
break;
}
}
// If nothing is installed, navigate user to the store.
if (intent == null) {
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" packages[packages.length - 1]));
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
catch (Exception e)
{
Log.e("FileManager", "startFilesManager: failed to start", e);
}
}
Обновление, которое я также пробовал, Intent.CATEGORY_APP_FILES
как показано ниже, но оно просто выдает ActivityNotFoundException
. Это происходит в любой версии Android (по крайней мере, в эмуляторе, где установлены файлы).
public static void startFilesManager(Context context)
{
try
{
Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_FILES);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
catch (Exception e)
{
Log.e("FileManager", "startFilesManager: failed to start", e);
}
}
Комментарии:
1. Вместо жесткого кодирования пакетов, возможно, вам следует использовать
CATEGORY_APP_FILES
вместо этого.2. Вы уверены, что на устройстве вообще есть это приложение? например, в файловом менеджере Samsungs приложение
com.sec.android.app.myfiles
3. Отличное предложение @CommonsWare, но оно не сработало. Вопрос обновлен с помощью примера кода.
4. Да, в любом случае это ново для API 29-го уровня-я пропустил это в своем первоначальном комментарии.