chris
chris

Reputation: 4351

Failing to start an activity with an implicit intent

I am a little confused why the implicit intent call is failing. When trying to start an intent I keep getting the following error:

    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" />    

Calling activity (dashboard)

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

Called activity (workouts). It doesn't make it here

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

It seems like it should be simple, but I am confused to why it says there is no activity found.

Any ideas?

Upvotes: 1

Views: 2246

Answers (2)

markshiz
markshiz

Reputation: 2561

Also, make sure you are using startActivity instead of sendBroadcast. There is a difference between these methods. A broadcast will not be received by an activity's intent filter. You must use a BroadcastReceiver for that.

Note that, although the Intent class is used for sending and receiving these broadcasts, the Intent broadcast mechanism here is completely separate from Intents that are used to start Activities with Context.startActivity(). There is no way for a BroadcastReceiver to see or capture Intents used with startActivity(); likewise, when you broadcast an Intent, you will never find or start an Activity. These two operations are semantically very different: starting an Activity with an Intent is a foreground operation that modifies what the user is currently interacting with; broadcasting an Intent is a background operation that the user is not normally aware of.

Source: http://developer.android.com/reference/android/content/BroadcastReceiver.html

Android docs: sendBroadcast

Android docs: startActivity

Upvotes: 0

rds
rds

Reputation: 26984

In order to be started with implicit intents, An activity must declare

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

Upvotes: 5

Related Questions