【问题标题】:No Activity found to handle Intent (API Level 19)未找到处理 Intent 的活动(API 级别 19)
【发布时间】:2023-04-05 09:55:01
【问题描述】:

对于我的一生,我已经与这种隐含的意图斗争了 2 多天了。我正在尝试使用 startActivity(intent) 隐式启动一个活动,但我一直收到“没有找到处理意图的活动”,我已按照 android 开发人员网站上关于如何创建和处理隐式意图的说明进行操作,并搜索了网络包括很多关于stackoverflow的帖子,但问题仍然存在。现在是时候写一些代码了:

组件 A - 触发隐式意图

Intent intent = new Intent();
//intent.setFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
intent.setAction(AppConstants.ACTION_VIEW_OUTLET);
//intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.withAppendedPath(OutletsContentProvider.CONTENT_URI,String.valueOf(outletID)));
intent.addCategory(Intent.CATEGORY_DEFAULT); 

    PackageManager pm = getPackageManager();
    ComponentName cn = intent.resolveActivity(pm);

    if(cn != null){
        startActivity(intent);
        Log.i(TAG, "Intent sent with action :" + intent.getAction());
        Log.i(TAG, "Intent sent with data :" + intent.getDataString());
    }

Android Manifest(与组件 A 在同一应用中)

    <activity
        android:name=".OutletDetailsActivity"
        android:label="@string/title_activity_outlet_details">
        <intent-filter>
            <data android:scheme="content" />
            <action android:name="com.synkron.pushforshawarma.ACTION_VIEW_OUTLET" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我做错了什么?我在使用广播意图方面取得了巨大的成功,但在这种情况下我不想使用广播/接收器。

【问题讨论】:

  • 你拥有的那些日志的输出是什么?
  • 06-22 11:18:54.187:E/AndroidRuntime(18813):致命异常:主要 06-22 11:18:54.187:E/AndroidRuntime(18813):进程:com.synkron。 pushforshawarma, PID: 18813 06-22 11:18:54.187: E/AndroidRuntime(18813): android.content.ActivityNotFoundException: 找不到处理 Intent { act=com.synkron.pushforshawarma.ACTION_VIEW_OUTLET cat=[android.intent. category.DEFAULT] dat=content://com.synkron.pushforshawarma.contentproviders.OutletsContentProvider/outlets/3 } 06-22 11:18:54.187: E/AndroidRuntime(18813): at android.app.Instrumentation.checkStartActivityResult(Instrumentation .java:1781) 06
  • 我的意思是您发布的代码中的日志。打印操作和数据字符串的位置。
  • 06-22 11:30:04.561:I/OutletListingsActivity(3046):意图发送操作:com.synkron.pushforshawarma.ACTION_VIEW_OUTLET 06-22 11:30:04.561:I/OutletListingsActivity(3046 ): Intent 与数据一起发送:content://com.synkron.pushforshawarma.contentproviders.OutletsContentProvider/outlets/3
  • 这样你就有了。 logcat 中对应于 Log.i 调用的日志条目

标签: android android-intent implicit


【解决方案1】:

所以我终于想通了。

碰巧当数据(URI,通过 setData 或使用接受 URI 的构造函数)设置在意图上时,系统会确定意图所需的适当 MIME 类型。

    Intent intent = new Intent(AppConstants.ACTION_VIEW_OUTLET);
    intent.putExtra("OUTLET_ID", 
        Uri.withAppendedPath(OutletsContentProvider.CONTENT_URI, String.valueOf(outletID)));
    intent.addCategory(Intent.CATEGORY_DEFAULT); 

当未设置或指定 URI 或数据时,需要使用 settype() 来指定与意图关联的数据类型 (MIME)。

所以基本上,我在初始化意图时没有设置 MIME 类型(因为我设置了数据 (URI),所以我必须这样做)。由于数据类型测试失败,intent-filter 无法匹配隐式 Intent。

我的解决方法是,我通过 putExtra 方法传递了我的 URI,而未设置数据。

我还从 android 清单中删除了对意图过滤器中数据标记的引用。

    <activity
        android:name=".OutletDetailsActivity"
        android:label="@string/title_activity_outlet_details">
        <intent-filter>
            <action android:name="com.synkron.pushforshawarma.ACTION_VIEW_OUTLET" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多