安卓App相互唤醒的几种方式
1、1. ComponentName
用ComponentName唤起Server,Server的Activity要在manifest配置中设置exported为true。
Server的配置:
<activity android:name="com.jxx.server.ServerActivity" android:exported="true"/>
Client调用:
Intent intent1 = new Intent();
ComponentName componentName = new ComponentName("com.jxx.server", "com.jxx.server.ServerActivity");
intent1.setComponent(componentName);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2、2. 隐式跳转Uri:
唤起拨号的页面
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phoneNumber));startActivity(intent);
用Uri的形式唤起Server并传递数据。
Server端配置:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.jxx.server.ServerActivity" />
<data android:host="com.jxx.server" android:scheme="ServerActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
3、3. PackageManager
知道Server的包名即可。
PackageManager packageManager = getPackageManager();
Intent intent3 = packageManager.getLaunchIntentForPackage("com.jxx.server");
if (intent3 != null)
{ startActivity(intent3);
4、4. 静态广播接收者
Server端注册一个静态广播接收者,在广播接收者中跳转Activity即可,客户端只需要发送一个广播。
Server定义广播接收者:
public class ServerBroadCastReceiver extends BroadcastReceiver
{
@Override public void onReceive(Context context, Intent intent)
{
Intent intent1 = new Intent(context, MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
}
在manifest中注册为静态广播接收者,并定义action:
<receiver android:name=".ServerBroadCastReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="server.ServerBroadCastReceiver" />
</intent-filter>