当前位置: 首页 > 知识库问答 >
问题:

Android 7.1.1上的ActivityNotFoundException

薛淮晨
2023-03-14

我有一个应用程序打开一个pdf文件,当我们点击按钮。它在Android的所有版本上都是正常的,但在Android7.1.1上崩溃了,我不知道为什么:/

这些是我看过的相关问题

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 217 48-21748/com.example.fr E/AndroidRuntime:致命异常:主进程:com.example.fr,pid:21748 Android.content.action.view dat=content://com.example.fr.fileprovider/assets/toto.pdf typ=application/pdf flg=0x1}在Android.app.instrumentation.checkstartactivityresult(instrumentation.java:1809)在ctivity.java:4490)在com.example.fr.mainactivity.readpdf(mainactivity.java:58)在com.example.fr.mainactivity.access$000(mainactivity.java:21)在com.example.fr.mainactivity.access$1。onclick(mainactivity.java:34)在android.view.view.performclick(view.java:5637)在android.view.view$performclick.run(view.java:5629)在

谢谢你的帮助

共有1个答案

董子航
2023-03-14

问题是,您强制系统打开意图,而不检查是否有应用程序可以处理意图。可能您正在尝试打开一个设备上的PDF,而该设备没有用于读取PDF文件的应用程序。请尝试使用以下代码:

PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent);
} else {
    Log.d(TAG, "No Intent available to handle action");
}
 类似资料:
  • Animal.java 我为它创建了以下自定义断言: AnimalAssert.java 编辑:基于第一个答案(cglib需要一个),我用一个no arg构造函数更新了动物类,但是抛出了相同的异常

  • 我的应用程序一直在许多Android平台上报告这个问题(4.1、4.0.4、2.3.6.…)。但我无法在我的手机上复制这个问题。我已经在Google上搜索了这个问题,但堆栈跟踪似乎与我的不一样。

  • 我有一台带有Intel CPU的Windows机器(在引导菜单上启用VMX)。我使用VirtualBox在上面运行Ubuntu Guest。我在上面运行qemu,以运行另一个Guest OS,使用kvm(选项)。 我在尝试插入kvm-intel模块时收到以下错误: 我已经检查了来宾操作系统中的vpx标志,但我也没有看到 有没有办法在来宾Ubuntu操作系统中启用kvm支持,以便我可以在Ubuntu

  • 我试图从java程序中使用Spark SQL,其中pom.xml中的依赖关系指向Spark版本1.6.0。下面是程序 但是,我在线程“main”java.lang.nosuchmethoderror:org.apache.spark.sql.sqlcontext.sql(ljava/lang/string;)lorg/apache/spark/sql/dataframe中出现异常;我正在创建一个平

  • 主机系统为ARCHLinux。我想开发需要运行Windows docker容器的.NET4.6.1应用程序。所以我在VirtualBox下运行Win10。然后我在Win10中安装Docker,以运行Windows Docker容器。Linux->VirtualBox->Win10->Docker->Windows Docker容器->要运行的应用程序。 或者更具体地说,VirtualBox是否支持

  • 问题内容: 我正在尝试根据此教程在我的应用程序中实现NotificationListenerService:http : //www.kpbird.com/2013/07/android- notificationlistenerservice.html ,但是调用getActiveNotifications时出现NullPointerException。 我正在向该服务发送广播,该广播应生成所有