简体   繁体   English

Android 7.1.1 上的 ActivityNotFoundException

[英]ActivityNotFoundException on Android 7.1.1

I have an application which open a pdf file whan we click on button.我有一个应用程序,当我们点击按钮时,它会打开一个 pdf 文件。 It was functionnal on all versions of Android but it crash on Android 7.1.1 and i don't know why :/它在所有版本的 Android 上都有效,但在 Android 7.1.1 上崩溃了,我不知道为什么:/

These are the related questions I have looked at这些是我看过的相关问题

ActivityNotFoundException when starting 启动时ActivityNotFoundException

No Activity found to handle Intent splash screen 没有找到处理 Intent 闪屏的活动

My function to open file in MainActivity:我在 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();
}

My manifest :我的清单:

<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>

Finally the error code :最后是错误代码:

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(A 04-26 08:15:16.991 21748-21748/com.example.fr E/AndroidRuntime:致命异常:主进程:com.example.fr,PID:21748 android.content.ActivityNotFoundException:未找到处理意图的活动{行为=android.intent.action.VIEW dat=content://com.example.fr.fileprovider/assets/toto.pdf typ=application/pdf flg=0x1 } 在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809 ) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1523) 在 android.app.Activity.startActivityForResult(Activity.java:4225) 在 android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75) 在 android.app.Activity.startActivityForResult(Activity.java:4183) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java) :871) 在 android.app.Activity.startActivity(Activity.java:4522) 在 android.app.Activity.startActivity(A ctivity.java:4490) at com.example.fr.MainActivity.readPDF(MainActivity.java:58) at com.example.fr.MainActivity.access$000(MainActivity.java:21) at com.example.fr.MainActivity$1.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) ctivity.java:4490) 在 com.example.fr.MainActivity.readPDF(MainActivity.java:58) 在 com.example.fr.MainActivity.access$000(MainActivity.java:21) 在 com.example.fr.MainActivity$1 .onClick(MainActivity.java:34) 在 android.view.View.performClick(View.java:5637) 在 android.view.View$PerformClick.run(View.java:22429) 在 android.os.Handler.handleCallback( Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) ) 在 java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit) .java:776)

Thank's for your help谢谢你的帮助

The problem is that you force the system to open the intent, without checking if there's an application that can handle the intent.问题是你强制系统打开意图,而没有检查是否有可以处理意图的应用程序。 Probably you're trying to open the PDF on a device that has not an application for reading a PDF file.您可能正在尝试在没有用于阅读 PDF 文件的应用程序的设备上打开 PDF。 Try using this code:尝试使用此代码:

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

No, it was not.不,那不是。 It was functional on those Android devices that you tested, and those devices happened to have a PDF viewer installed that supported the content scheme.它在您测试的那些 Android 设备上运行正常,并且这些设备碰巧安装了支持content方案的 PDF 查看器。 Android itself does not have a PDF viewer, and there is no requirement that all devices have a PDF viewer and all users (of multi-user devices) have access to a PDF viewer. Android 本身没有 PDF 查看器,并且不要求所有设备都具有 PDF 查看器,并且所有用户(多用户设备的)都可以访问 PDF 查看器。

but it crash on Android 7.1.1 and i don't know why但它在 Android 7.1.1 上崩溃了,我不知道为什么

The device that you are testing on does not have a PDF viewer that supports the content scheme.您正在测试的设备没有支持content方案的 PDF 查看器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM