Android 开机启动应用

   现在去面试的时候有些人碰到了这样的问题,Android中如果实现开机启动一个app应用?

  今天我们就一起来探讨这个问题,希望大家在以后工作中有所帮助,谢谢!直接进入主题。

  首先我们大家一定会想到用我们android的 BroadcastReceiver来实现,对就是用我们的BroadcastReceiver,如果大家对广播不是很熟悉的话要先了解一下。

 我简单的介绍一下我们的广播吧。

 广播分为两种有一下两种说法:

  一种方式区分常驻和非常驻

     1.一种是常驻广播,就是在我们manifest注册广播,当我们的应用结束之后,这个广播依然存在。

     2.另一种就是非常驻广播,就是我们用代码注册的广播。

二种方式 静态注册和动态注册的区别

   1.静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。
   2.动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。
   静态注册的步骤:
     1.定义广播接收器,继承BroadcastReceiver类,覆写onReceive函数.
     2.在xml文件中注册监听器,定义Intent-Filter中感兴趣的action操作.
     3.使用sendBroadCast向系统发送对其感兴趣的广播接收器中

     SMSReceiver  smsReceiver = new SMSReceiver(); 

      IntentFilterfilter = new IntentFilter();        

      filter.addAction(android.provider.Telephony.SMS_RECEIVED); 

     TestBC1Activity.this.registerReceiver(smsReceiver, filter);  

   (无需在配置文件中注册接收器)

     那么我们android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast Action              android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action。

  下面我就来简单写以下实现的步骤:  

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

       import android.content.BroadcastReceiver; 

       importandroid.content.Context; 

       importandroid.content.Intent; 

       import android.util.Log; 

  

       public class BootBroadcastReceiver extends BroadcastReceiver { 

          //重写onReceive方法

         @Override

          public voidonReceive(Context context, Intent intent) { 

          // 第一种情况 我们要启动的Service ,后边的XXX.class就是要启动的服务

              Intent service = new Intent(context,XXXclass); 

                  context.startService(service); 

              Log.v("TAG", "开机自动服务自动启动....."); 

           //第二种情况是我们要启动应用,参数为需要自动启动的应用的包名

          Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);//这段代码是关键点

          context.startActivity(intent ); 

              } 

          } 

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

       <receiverandroid:name="BootBroadcastReceiver"> 

              <intent-filter> 

                   <actionandroid:name="android.intent.action.BOOT_COMPLETED"></action> 

                   <categoryandroid:name="android.intent.category.LAUNCHER"/> 

              </intent-filter> 

           </receiver>

第三步:添加权限

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

ok,搞定,希望对大家有所帮助,谢谢大家!有问题可以加Q聊  545614498

 


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值