找不到处理Intent的活动(API级别19)

时间:2015-06-22 10:09:32

标签: android android-intent implicit

对于我的生活,我一直在与这种隐含的意图作斗争超过2天。我试图隐式使用startActivity(intent)启动一个Activity,但我一直得到“找不到处理意图的活动”,我已经按照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>

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

1 个答案:

答案 0 :(得分:0)

所以我终于明白了。

恰好,当在intent上设置数据(URI,通过setData或使用接受URI的构造函数)时,系统会确定intent所需的相应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()来指定与intent关联的数据类型(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>