我知道有两种方法可以实现这种目标。
BroadcastReceiver
<application
...
<!-- BROADCAST RECEIVER -->
<receiver
android:name="com.package.app.Broadcaster"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="image/*"/>
</intent-filter>
</receiver>
<activity
...
</activity>
...
</application>
- com.package.app.Broadcaster
public final class Broadcaster extends BroadcastReceiver
{
@Override
public final void onReceive(final Context context, final Intent intent) {
//Activity to handle the files.
intent.setClass(context, MainActivity.class);
//RuntimeException without this flag.
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
Service
<application
...
<!-- SERVICE -->
<service
android:enabled="true"
android:name="com.package.app.Servicer"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="image/*"/>
</intent-filter>
</service>
<activity
...
</activity>
...
</application>
public final class Servicer extends Service
{
@Override
public final int onStartCommand(final Intent intent, final int flags, final int startId) {
//Activity to handle the files
intent.setClass(this, MainActivity.class);
//RuntimeException without this flag.
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
//Stop this service.
stopSelfResult(startId);
return super.onStartCommand(intent, flags, startId);
}
@Override
public final IBinder onBind(final Intent intent) {
return null;
}
}