未能以隐含意图启动活动

时间:2012-01-15 21:34:53

标签: android android-intent

我有点困惑为什么隐式意图调用失败了。尝试启动意图时,我不断收到以下错误:

    android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://org.chrisolsen.crossfit.providers.WorkoutProvider/workouts typ=vnd.android.cursor.dir/vnd.chrisolsen.crossfit.workout }

AndroidManifest

    <activity android:name=".activities.WorkoutsActivity" 
        android:label="@string/title_workouts" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <data android:mimeType="vnd.android.cursor.dir/vnd.chrisolsen.crossfit.workout"/>
        </intent-filter>
    </activity> 

    <provider 
      android:name=".providers.WorkoutProvider"
      android:authorities="org.chrisolsen.crossfit.providers.WorkoutProvider" />    

致电活动(仪表板)

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(WorkoutProvider.CONTENT_URI, "vnd.android.cursor.dir/vnd.chrisolsen.crossfit.workout");
    startActivity(intent);

被叫活动(锻炼)。它没有在这里

    Uri uri = getIntent().getData();
    ...

看起来它应该很简单,但我很困惑为什么它说找不到任何活动。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

为了以隐含意图开始,活动必须声明

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

答案 1 :(得分:0)

另外,请确保使用的是startActivity而不是sendBroadcast。这些方法之间存在差异。活动的意图过滤器不会接收广播。您必须使用BroadcastReceiver

  

请注意,虽然Intent类用于发送和接收这些广播,但此处的Intent广播机制与用于使用Context.startActivity()启动活动的Intent完全分开。 BroadcastReceiver无法查看或捕获与startActivity()一起使用的Intent;同样,当你广播一个意图时,你永远不会找到或开始一个活动。这两个操作在语义上非常不同:使用Intent启动Activity是一个前台操作,它修改用户当前正在与之交互的内容;广播Intent是用户通常不知道的后台操作。

来源:http://developer.android.com/reference/android/content/BroadcastReceiver.html

Android docs: sendBroadcast

Android docs: startActivity