使用Intent.ACTION_GET_CONTENT选择一个文件

时间:2012-07-27 00:38:09

标签: android android-intent android-file

我正在关注此tutorial,我正在模拟器上测试它,当我运行此项目并单击按钮时它崩溃并给我以下错误

07-27 06:33:30.324: E/AndroidRuntime(10972): FATAL EXCEPTION: main
07-27 06:33:30.324: E/AndroidRuntime(10972): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file/ * }
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.app.Activity.startActivityForResult(Activity.java:2817)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at com.exercise.AndroidPick_a_File.AndroidPick_a_File$1.onClick(AndroidPick_a_File.java:35)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.view.View.performClick(View.java:2408)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.view.View$PerformClick.run(View.java:8816)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.os.Handler.handleCallback(Handler.java:587)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.os.Looper.loop(Looper.java:123)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at android.app.ActivityThread.main(ActivityThread.java:4627)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at java.lang.reflect.Method.invokeNative(Native Method)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at java.lang.reflect.Method.invoke(Method.java:521)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-27 06:33:30.324: E/AndroidRuntime(10972):    at dalvik.system.NativeStart.main(Native Method)

我想处理此错误,请帮我处理此错误。

2 个答案:

答案 0 :(得分:5)

您遇到此错误,因为您在模拟器上没有文件资源管理器应用程序。

如果要测试是否安装了文件资源管理器:

final PackageManager packageManager = getActivity().getPackageManager();
final Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("file/*");
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
                                PackageManager.GET_ACTIVITIES);

if (list.size() > 0) {
    //app installed
} else {
    //no app
}

答案 1 :(得分:0)

如同类似问题所示(https://stackoverflow.com/a/34181925/4098711)。假设您正处于活动中(否则通过返回当前活动的方法替换它):

final PackageManager packageManager = this.getPackageManager();
final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
ComponentName testedActivity = intent.resolveActivity(getPackageManager());
if (testedActivity != null) {
    startActivityForResult(intent,IMPORT_FILE_REQ_CODE);
} else {
    Toast.makeText(this,"No file explorer available",Toast.LENGTH_LONG).show();
}