背景
无页面App
App需要有一个Activity来激活,可以不添加view
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.emao.uni.zng.ext">
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@android:style/Theme.NoDisplay" >
<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="com.emao.uni.zng.receiver.EmaoApkReceiver"
android:exported="true"
android:process=":remote" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="com.emao.uni.zng.action.ACTION_INSTALL_APK" />
<action android:name="com.emao.uni.zng.action.ACTION_UNINSTALL_APK" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
</application>
</manifest>
package com.emao.uni.zng.ext;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
/**
* 空 Activity, 激活App
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
}
package com.emao.uni.zng.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.emao.uni.zng.ext.MainActivity;
public class MyReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.i("TAG", "intent:" + intent);
// 启动 app, 开机自启动
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent intent1 = new Intent(context, MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
return;
}
if (mService == null) {
mService = new MyService(context);
}
if (ACTION_1.equals(intent.getAction())) {
String param1 = intent.getStringExtra("param1");
String param2 = intent.getStringExtra("param2");
boolean param3 = intent.getBooleanExtra("param1", false);
Log.e("TAG", "param1:" + param1);
Log.e("TAG", "param2:" + param2);
Log.e("TAG", "param3:" + param3);
return;
}
if (ACTION_2.equals(intent.getAction())) {
String param1 = intent.getStringExtra("param1");
Log.e("TAG", "param1:" + param1);
return;
}
}
}
主App
Intent intent1 = new Intent(ACTION_INSTALL_APK);
intent1.setPackage("目标包名");
intent1.putExtra("param1", "/apkPath");
intent1.putExtra("param2", "com.emao.uni");
intent1.putExtra("param3", true);
sendBroadcast(intent1);
📢 注意!!!Android 接收不到静态广播(自定义广播)
解决方法:intent1.setPackage(“目标包名”); 从Android 8.0(API级别26)开始,该系统对声明清单的接收者施加了额外的限制。 如果你的应用目标是Android 8.0或更高版本,你不能使用清单为大多数隐式广播(不是专门针对你的应用的广播)声明接收器。当用户正在使用你的应用程序时,你仍然可以使用上下文注册的接收器。
大致意思是官方在这方面做了限制,定义的静态广播必须指定范围(应用),类似于生活中广播要在指定频道才能收到。 既然如此,其实指定要广播的应用包名就行了,这样更加灵活和方便 ———————————————— 版权声明:本文为CSDN博主「飞鸭传书」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/jppipai/article/details/123270606