一个app A打开另一个app B的Activity:
Intent intent2 = new Intent();
intent2.setClassName("com.example.servicepop", "com.example.servicepop.demo.DemoFloatingWindow");
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent2);
注意:
app B中的Activity必须声明为android:exported="true"
---
跨应用程序启动另一个程序的后台服务service是不可行的。
跨应用程序发送广播,在广播中打开后台服务service可行吗?app B静态注册广播接收器,也就是希望在程序未启动(处于后台)就能够接收并处理广播,如果广播是隐式的(即没有指定具体的目标组件),系统可能会阻止在后台的应用程序接收该广播。
例:隐式广播
String broadcastIntent = "com.example.testPop";//自己自定义Intent intent = new Intent(broadcastIntent);sendBroadcast(intent);
解决办法:使用显示广播
app A:发送广播
Intent intent = new Intent();intent.setComponent(new ComponentName("com.example.servicepop", "com.example.servicepop.CustomBroadcastReceiver"));intent.setAction("com.example.testPop");intent.putExtra("data", "Hello from Program A");sendBroadcast(intent);
app B:
1.AndroidManifest.xml声明广播接收者
<receiver android:name=".CustomBroadcastReceiver"android:exported="true"><intent-filter><action android:name="com.example.testPop" /></intent-filter>
</receiver>
2.创建广播接收者处理类
public class CustomBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if ("com.example.testPop".equals(intent.getAction())) {// 处理接收到的数据Log.d("CustomBroadcastReceiver", "Received:----------- " );}}
}
最后发现,在广播接收者中打开后台service(带视图的),失败了,这是系统不允许的!!
那么也就是说,想要完成像360悬浮窗那样的效果,打开一个带视图的service,那么必须打开这个app,然后授予悬浮权限,这样才能做到即使app没有在后台运行app列表,仍旧显示在桌面上。