现在去面试的时候有些人碰到了这样的问题,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内核开发:图解Android系统的启动过程
  2. Android内核开发:图解Android系统的启动过程
  3. android进程创建分析
  4. Android内核开发:学会分析系统的启动log
  5. Android学习第八天—全局大喇叭(详解广播机制)
  6. [Android] Android应用启动后自动创建桌面快捷方式
  7. Android(安卓)Socket 发送广播包的那些坑
  8. Android(安卓)xutils 登录 注册
  9. 如何隐藏Android4.0及以上版本的ActionBar、NotificationBar、St

随机推荐

  1. android 短信验证自动获取验证码
  2. Android(安卓)深入研究LBS(基于位置的服务
  3. 【Android】application标签说明
  4. Android外置存储器(SD卡)工具类
  5. 2013.11.28 ——— android 网络3g wifi
  6. android 关于图片的放大,缩小,旋转功能的实
  7. 自定义进度条
  8. Android(安卓)自定义Progress Bar
  9. FragmentTabhost记录
  10. A Visual Guide to Android(安卓)GUI Wid