Android 7.1.1 上的 ActivityNotFoundException
ActivityNotFoundException on Android 7.1.1
我有一个应用程序可以在我们点击按钮时打开一个 pdf 文件。它在 Android 的所有版本上都有效,但在 Android 7.1.1 上崩溃了,我不知道为什么:/
这些是我看过的相关问题
ActivityNotFoundException when starting
No Activity found to handle Intent splash screen
我在 MainActivity 中打开文件的函数:
private void readPDF({
File f = new File(getFilesDir(), "toto.pdf");
if (!f.exists()) {
AssetManager assets=getResources().getAssets();
try {
copy(assets.open("toto.pdf"), f);
}
catch (IOException e) {
Log.e("FileProvider", "Exception copying from assets", e);
}
}
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", f);
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
revokeUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
}
private void copy(InputStream in, File dst) throws IOException {
FileOutputStream out=new FileOutputStream(dst);
byte[] buf=new byte[1024];
int len;
while ((len=in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
我的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fr">
<application
android:allowBackup="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.fr.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
<activity
android:name="com.example.fr.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
最后的错误代码:
04-26 08:15:16.991 21748-21748/com.example.fr E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.fr, PID: 21748
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://com.example.fr.fileprovider/assets/toto.pdf typ=application/pdf flg=0x1 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
at android.app.Activity.startActivityForResult(Activity.java:4225)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
at android.app.Activity.startActivityForResult(Activity.java:4183)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871)
at android.app.Activity.startActivity(Activity.java:4522)
at android.app.Activity.startActivity(Activity.java:4490)
at com.example.fr.MainActivity.readPDF(MainActivity.java:58)
at com.example.fr.MainActivity.access[=13=]0(MainActivity.java:21)
at com.example.fr.MainActivity.onClick(MainActivity.java:34)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
感谢您的帮助
问题是您强制系统打开意图,而不检查是否有可以处理意图的应用程序。可能您正在尝试在没有阅读 PDF 文件的应用程序的设备上打开 PDF。尝试使用此代码:
PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent);
} else {
Log.d(TAG, "No Intent available to handle action");
}
It was functionnal on all versions of Android
不,不是。它在您测试的那些 Android 设备上正常运行,并且这些设备恰好安装了支持 content
方案的 PDF 查看器。 Android 本身没有 PDF 查看器,并且不要求所有设备都具有 PDF 查看器并且所有用户(多用户设备的)都可以访问 PDF 查看器。
but it crash on Android 7.1.1 and i don't know why
您正在测试的设备没有支持 content
方案的 PDF 查看器。
我有一个应用程序可以在我们点击按钮时打开一个 pdf 文件。它在 Android 的所有版本上都有效,但在 Android 7.1.1 上崩溃了,我不知道为什么:/
这些是我看过的相关问题
ActivityNotFoundException when starting
No Activity found to handle Intent splash screen
我在 MainActivity 中打开文件的函数:
private void readPDF({
File f = new File(getFilesDir(), "toto.pdf");
if (!f.exists()) {
AssetManager assets=getResources().getAssets();
try {
copy(assets.open("toto.pdf"), f);
}
catch (IOException e) {
Log.e("FileProvider", "Exception copying from assets", e);
}
}
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", f);
intent.setDataAndType(uri, "application/pdf");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
revokeUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
}
private void copy(InputStream in, File dst) throws IOException {
FileOutputStream out=new FileOutputStream(dst);
byte[] buf=new byte[1024];
int len;
while ((len=in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
我的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fr">
<application
android:allowBackup="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.fr.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
<activity
android:name="com.example.fr.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
最后的错误代码:
04-26 08:15:16.991 21748-21748/com.example.fr E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.fr, PID: 21748 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://com.example.fr.fileprovider/assets/toto.pdf typ=application/pdf flg=0x1 } at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523) at android.app.Activity.startActivityForResult(Activity.java:4225) at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75) at android.app.Activity.startActivityForResult(Activity.java:4183) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871) at android.app.Activity.startActivity(Activity.java:4522) at android.app.Activity.startActivity(Activity.java:4490) at com.example.fr.MainActivity.readPDF(MainActivity.java:58) at com.example.fr.MainActivity.access[=13=]0(MainActivity.java:21) at com.example.fr.MainActivity.onClick(MainActivity.java:34) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
感谢您的帮助
问题是您强制系统打开意图,而不检查是否有可以处理意图的应用程序。可能您正在尝试在没有阅读 PDF 文件的应用程序的设备上打开 PDF。尝试使用此代码:
PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent);
} else {
Log.d(TAG, "No Intent available to handle action");
}
It was functionnal on all versions of Android
不,不是。它在您测试的那些 Android 设备上正常运行,并且这些设备恰好安装了支持 content
方案的 PDF 查看器。 Android 本身没有 PDF 查看器,并且不要求所有设备都具有 PDF 查看器并且所有用户(多用户设备的)都可以访问 PDF 查看器。
but it crash on Android 7.1.1 and i don't know why
您正在测试的设备没有支持 content
方案的 PDF 查看器。