背景
无页面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"><applicationandroid: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><receiverandroid: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 {@Overrideprotected 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
