欢迎您来到懒之才-站长的分享平台!   学会偷懒,并懒出境界是提高工作效率最有效的方法!
首页 > 经验分享 > APP > Android开机自启动App

Android开机自启动App

2023-01-06 796 收藏 0 赞一个 0 真差劲 4 去评论

开机启动概要

Android程序如果想要开机自启动,这里就会涉及到Android四大组件的内容Service、BoadcastReceiver。

什么是Service服务

当我们在开发App时,有时候会用到没用界面的程序交互时就会用到Service,比如说音乐播放器,我们在退出音乐播放器时,其实音乐还是会在后台程序中运行,此时播放器我们是看不见的。

服务生命周期:context.startService() ->onCreate()- >onStart()- >onStartCommand()->Service running ->context.stopService()  ->onDestroy() ->Service stop

如果Service还没有运行,则android先调用onCreate()然后调用onStartCommand(),每次调用startService(Intent)的时候,都会调用执行onStartCommand();

如果Service已经运行,则只调用onStartCommand()。 

我们要执行操作可在onStartCommand方法中定义,onStartCommand有4种返回值: 

START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。

START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。

 START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

什么是BoadcastReceiver

BroadcastReceiver用于接收程序(包括系统程序和一般应用)通过sendBroadcast()方法发出的Broadcast intents。

程序启动BroadcastReceiver的步骤

1) 创建需要启动BroadcastReceiver的Intent。

2) 调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。其中sendBroadcast发送的是普通广播,sendOrderedBroadcast发送的是有序广播。

当应用发出一个Broadcast Intent之后所匹配该Intent的组件都可能被启动。

创建BroadcastReceiver的步骤:

第一步:创建BroadcastReceiver的子类:

由于BroadcastReceiver本质上是一种监听器,所以创建BroadcastReceiver的方法也非常简单,只需要创建一个BroadcastReceiver的子类然后重写onReceive (Context context, Intentintent)方法即可。

public class MyBroadcastReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
                   // TODO Auto-generated method stub
                   String msg=intent.getExtras().get("msg").toString();
                   Toast.makeText(context,"intent.getAction()"+intent.getAction().toString(),
                                     Toast.LENGTH_LONG).show();
                   System.out.println("msg:"+msg);
         }
}

第二步:注册BroadcastReceiver

一旦实现了BroadcastReceiver,接下就应该指定该BroadcastReceiver能匹配的Intent即注册BroadcastReceiver。注册BroadcastReceiver的方式有两种:

第一种是静态注册:这种方法是在配置AndroidManifest.xml配置文件中注册,通过这种方式注册的广播为常驻型广播,也就是说如果应用程序关闭了,有相应事件触发,程序还是会被系统自动调用运行。例如:

<!-- 在配置文件中注册BroadcastReceiver能够匹配的Intent -->
<receiver android:name="com.example.test.MyBroadcastReceiver">
    <intent-filter>
        </action>
        <category android:name="android.intent.category.DEFAULT"></category>
    </intent-filter>
</receiver>

第二种是动态注册:这种方法是通过代码在.Java文件中进行注册。通过这种方式注册的广播为非常驻型广播,即它会跟随Activity的生命周期,所以在Activity结束前我们需要调用unregisterReceiver(receiver)方法移除它。例如:

/通过代码的方式动态注册MyBroadcastReceiver
MyBroadcastReceiver receiver=new MyBroadcastReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("android.intent.action.MyBroadcastReceiver");
//注册receiver
registerReceiver(receiver, filter);

注意:如果我们在Activity中注册了BroadcastReceiver,当这个Activity销毁的时候要主动撤销注册否则会出现异常。方法如下:

@Override
protected void onDestroy() {
          // TODO Auto-generated method stub
          super.onDestroy();
          //当Activity销毁的时候取消注册BroadcastReceiver
          unregisterReceiver(receiver);
}

好了不废话了,下面进入到当App想要开机自启动时所需要的代码。

第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。

import android.content.BroadcastReceiver;  
   import android.content.Context;  
   import android.content.Intent;  
   import android.util.Log;  
   public class BootBroadcastReceiver extends BroadcastReceiver {  
       //重写onReceive方法  
       @Override  
       public void onReceive(Context context, Intent intent) {  
           //后边的XXX.class就是要启动的服务  
           Intent service = new Intent(context,XXX.class);  //这里XXX.class就是主程序入口,默认都是MainActivity.class
           context.startService(service);  
           Log.v("TAG", "开机自动服务自动启动.....");  
          //启动应用,参数为需要自动启动的应用的包名 
   Intent intent1 = getPackageManager().getLaunchIntentForPackage("com.example.m"); //包名写成自己程序包名
   context.startActivity(intent );        
       }  
   }

第二步:配置xml文件,在receiver接收这种添加intent-filter配置  

<receiver android:name="BootBroadcastReceiver">  
                <intent-filter>  
                    <action android:name="android.intent.action.BOOT_COMPLETED"></action>  
                    <category android:name="android.intent.category.LAUNCHER" />  
                </intent-filter>  
            </receiver>

第三步:添加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

完成以上操作之后,run一下app然后重启手机即可,本人在真机下测试可行,不知道模拟器的情况。

如有什么不懂的地方可以提出来一起探讨。

一、推荐使用迅雷或快车等多线程下载软件下载本站资源。

二、未登录会员无法下载,登录后可获得更多便利功能,若未注册,请先注册。

三、如果服务器暂不能下载请稍后重试!总是不能下载,请点我报错 ,谢谢合作!

四、本站大部分资源是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!本站将不对任何资源负法律责任.如果您发现本站有部分资源侵害了您的权益,请速与我们联系,我们将尽快处理.

五、如有其他问题,请加网站设计交流群(点击这里查看交流群 )进行交流。

六、如需转载本站资源,请注明转载来自并附带链接

七、本站部分资源为加密压缩文件,统一解压密码为:www.aizhanzhe.com

大家评论