Android开机自启动App(附带源码)
2016-09-02 10:41
405 查看
开机启动概要
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()或s
endOrderedBroadcast()方法来启动指定的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然后重启手机即可,本人在真机下测试可行,不知道模拟器的情况。
如有什么不懂的地方可以提出来一起探讨。
相关文章推荐
- android开机自启动app
- Android设置App是否开机自启动
- Android 实现开机自启动app
- android的APP开机自启动
- android开机自启动app示例分享
- android 设备开机自启动app
- Android开机自启动应用app的功能
- Android——开机自启动app
- Android开发 设置App开机自启动
- 编写自己的android主界面=开机自启动自己的APP(Application of ADB disable/enable)
- android开机自启动app示例分享
- Android 5.1开机自启动示例程序(Activity,APP包启动)
- android开机自启动APP及使用adb命令测试
- android开机自启动APP及使用adb命令测试方法
- Android开机自启动app 按home键 再手动点开,app被打开了两次
- Android 代码设置开机自启动App的方法
- Android 代码设置开机自启动App
- android总结一: 开机自启动APP
- android开机自启动app