使用Intent启动活动

时间:2013-01-19 23:47:22

标签: android android-intent android-activity

我的AndroidManifest中有以下内容:

<activity android:name="IntentChild"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.EDIT" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.intent.cursor.item/intent_example"
              android:host="example.intent"
              android:path="intent_example"
              android:scheme="content"
        />
    </intent-filter>
</activity>

我用

启动活动
Uri uri = new Uri.Builder().scheme("content").authority("example.intent").appendPath("intent_example").build(); 
Intent intent = new Intent(Intent.ACTION_EDIT, uri); 
IntentExample.this.startActivity(intent);

但我明白了:

E/AndroidRuntime( 865): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.EDIT dat=content:// 
example.intent/intent_example }

我做错了什么?此外,Uri.Builder.authority()是否与我的清单中android:host标记的<data>属性相同?

1 个答案:

答案 0 :(得分:0)

@ A - C的评论提示,我最后添加了对Intent.setType()的调用以设置所需的MIME类型:

Uri uri = new Uri.Builder().scheme("content").authority("example.intent").appendPath("intent_example").build(); 
Intent intent = new Intent(Intent.ACTION_EDIT, uri); 
intent.setType("vnd.intent.cursor.item/intent_example");
IntentExample.this.startActivity(intent);

为简单起见,我还修剪了<intent-filter>仅宣布android:mimeType。我想,但不完全确定,这不像以前的改变那么重要。

<activity android:name="IntentChild"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.EDIT" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.intent.cursor.item/intent_example"/>
    </intent-filter>
</activity>