美文网首页安卓基础知识android
如何使APP开机自启动

如何使APP开机自启动

作者: itbird01 | 来源:发表于2018-05-07 16:36 被阅读233次

方案一

将app做成系统应用,直接安装在 system/app 目录下
具体步骤为:
1.在AndroidManifest文件中,添加

android:sharedUserId="android.uid.system"
例如: image.png

2.将您的apk直接通过adb命令push到system/app下面,重启手机即可

方案二

1.创建一个广播接收者

package itbird.com.myapplication33;

import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import java.util.List;

/**
 * Created by xfkang on 2018/5/7.
 */

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null) {
            return;
        }

        Log.d("MyReceiver", intent.getAction());
        if (!isRun(context, "itbird.com.myapplication33")) {
            intent.setClass(context, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }

    /**
     * 判断应用是否在运行
     *
     * @param context
     * @return
     */
    public boolean isRun(Context context, String packagename) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
        boolean isAppRunning = false;
        //100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表系统后台有此进程在运行
        for (ActivityManager.RunningTaskInfo info : list) {
            if (info.topActivity.getPackageName().equals(packagename) || info.baseActivity.getPackageName().equals(packagename)) {
                isAppRunning = true;
                Log.d("ActivityService isRun()", info.topActivity.getPackageName() + " info.baseActivity.getPackageName()=" + info.baseActivity.getPackageName());
                break;
            }
        }
        Log.d("ActivityService isRun()", "com.ad 程序  ...isAppRunning......" + isAppRunning);
        return isAppRunning;
    }
}

2.给receiver配置对应intent-filter

    <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="ITBIRD.TEST.ACTION"/>
            </intent-filter>
    </receiver>

3.添加权限,缺少这步则无法在Android 3.0及其之前版本上自启动

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

注意
1.由于Android系统在外置SD卡加载前广播ACTION_BOOT_COMPLETED,于是如果应用安装在外置SD卡上,它无法接收到此广播

2.FLAG_INCLUDE_STOPPED_PACKAGES的问题,请阅读《Android应用在未启动的情况下接受指定广播》

相关文章

  • 如何使APP开机自启动

    方案一 将app做成系统应用,直接安装在 system/app 目录下具体步骤为:1.在AndroidManife...

  • App开机自启动

    App开机自启动 通过开机广播来实现自启动 定义开机广播 在AndroidManifest.xml注册BootCo...

  • 【全志系统-2】 - 开机启动与守护进程

    1. 开机自启动 Linux下,一些重要的程序一般都设置为开机自启动,避免每次重启都去手动启动,那么如何设置开机自...

  • Android 应用自启动

    如何实现开机自启动? 1 添加广播类 2 清单文件中添加权限及注册广播 开机自启动验证 使用 adb 命令方式发送...

  • 树莓派通过rc.local设置开机自启动指定脚本

    前言 树莓派如何通过rc.local设置开机自启动指定脚本;以树莓派开机自启动frp服务为例; 方法 1. 创建需...

  • App开机自启动

    首先 在工程上新建一个用来接受广播的类,要继承BroadcastReceiver 然后 在Androidmanif...

  • win10自启动管理

    虽然开机自启动程序会影响开机速度,不过将一些必用软件设置生开机自启动也是很爽的。 添加开机自启动 WIN键 + R...

  • Windows设置软件开机自启动

    有时候我们需要手动为某些软件设置开机自启动权限,或者手动取消软件开机自启动权限。 取消开机自启动权限: 1. Wi...

  • 云计算基本操作

    1、开机自启动 [root@oldboy data]# virsh autostart web01关闭开机自启动[...

  • 2019-07-18 ubuntu18.04 开机优化

    开机自启动服务 systemd-analyze blame 可以查看开机自启动服务 sudo systemctl ...

网友评论

本文标题:如何使APP开机自启动

本文链接:https://www.haomeiwen.com/subject/aqhvrftx.html