现在去面试的时候有些人碰到了这样的问题,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. 系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Bro
  2. Android中获得上下文的静态方法
  3. android BroadcastReceiver(广播接收器)【转载】
  4. Android中的人脸检测的示例代码(静态和动态)
  5. Android 导入多个外部静态链接库, 进行动态库编译方法( NDK)
  6. android中广播接收者BroadcastReceiver

随机推荐

  1. Android平台值得关注的开源项目
  2. kotlin笔记 一
  3. ANDROID 中handler类的使用
  4. Android中通过Messenger与Service实现进
  5. android 7.0平台客制化虚拟导航按键(隐藏
  6. 浅谈Android事件分发机制
  7. android字符太长自动变成省略号
  8. View的基础知识
  9. Learning Android 第1章 - 工欲善其事,必
  10. android进程在管理器中被杀死