在服务中使用隐含意图启动主活动

时间:2012-09-28 21:31:27

标签: android android-intent

我在服务中有一个隐含的意图,它将信息发送到我的主要活动以及另一个类。我现在也想要启动我的主要活动。我查看了与此相关的无数帖子,并在清单中尝试了很多不同的事情 - addCategorysetAction(MAIN; the activity's name; you name it, I've tried it...)category.DEFAULT,以及导致ActivityNotFoundExceptions的其他一些事情(最常见的)或其他不受欢迎的行为。

这是设置意图的位置以及清单的相关部分。意图的接收者在主要活动中注册。

final String NEW_DOSES = "changed to protect the innocent";
Intent bluetoothBroadcast = new Intent();
several putExtra lines here
bluetoothBroadcast.setAction(NEW_DOSES);
sendBroadcast(bluetoothBroadcast);

<activity
   android:name=".AsthmaAppActivity"
   android:label="@string/app_name" >
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

是否有可能通过相对较小的更改来启动我的主要活动?提前谢谢。

1 个答案:

答案 0 :(得分:1)

是的,有可能但没有sendBroadcast(bluetoothBroadcast); sendBroadcast不会启动活动。您必须使用startActivity来实现此目的。例如,以下是启动器应用程序为启动应用程序所执行的操作:

public static void LaunchApplication(Context cx, String packagename) {
    PackageManager pm = cx.getPackageManager();
    Intent i = pm.getLaunchIntentForPackage(ai.packageName);
    if (i != null) cx.startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}

您可以轻松调整额外内容以及启动活动所需的数据。例如,如果您的活动名为myActivity,那么您可以这样:

Intent i = new Intent(cx, myActivity.class);
//Put the extras and the data you want here...
//If you are launching the activity from a receiver component you must use
//i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
cx.startActivity(i);

希望这会有所帮助......