Android:在不是Activity或BroadcastReceiver的类中威胁隐式意图

时间:2016-09-23 14:15:28

标签: android android-intent broadcastreceiver

我想以隐含的意图启动应用程序,但在该应用程序启动之前,我需要处理意图并启动状态机,然后加载Activity

我可以使用广播接收器或活动

来做到这一点
<receiver android:name="com.13.MyBroadcastReceiver">
    <intent-filter>
        <action android:name="com.13.StartStateMachine" />
    </intent-filter>
</receiver>

但是如果其他应用程序响应同样的意图我就无法控制。

<activity android:name="com.13.MyReceiverActivity">
    <intent-filter>
        <action android:name="com.13.StartStateMachine" />
    </intent-filter>
</activity >

但这不是很干净,我可以进行一些处理onCreate()然后finish()

我是否可以将这些方法结合起来? 我的意思是使用隐式(或显式)意图从另一个应用程序加载一个类(不是BroadcastReceiverActivity)?

1 个答案:

答案 0 :(得分:1)

由于这两个应用程序都属于您,因此欢迎您使用您想要的任何IPC机制。

使用Activity的好处是您可以选择说一切都在同一个任务中。因此,当App A启动App B的活动时,这可能都是一项任务。任何其他IPC机制都会迫使您开始新任务。

因此,正如我在评论中建议的那样,使用PackageManager将隐式Intent转换为明确的Intent。然后,使用您想要的任何IPC。如果你想使用&#34;广播&#34; (显式finish()确实使它更像是一个&#34;窄播&#34;),欢迎你这样做。

恕我直言,说一项活动将控制转移到另一项活动,可能使用startActivity(),并不是真的很糟糕&#34;。毕竟,应用程序使用的许多启动屏幕都是这样做的。恕我直言,使用任何其他IPC机制开始一项活动,当mGoogleMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { @Override public void onMapLongClick(LatLng latLng) { Intent ii = new Intent(MapActivity.this, OtherActivity.class); ii.putExtra("clicked_location", latLng); startActivity(ii); } }); 工作正常时,肮脏&#34;。