Android应用程序可以实现开机时启动相关应用(如service等),Android系统在开机启动时会发出一个系统广播"android.intent.action.BOOT_COMPLETED",在接收到这个广播就可以实现开机自启动功能。
下面就是一个简单的开机启动的广播receiver
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.feng.service.AndroidTestService;
import com.feng.service.SecondService;
/**
* @ClassName: BootReceiver
* @Description:广播监听程序
* @author: Android_Robot
* @date: 2011-11-26 08:44:33
*/
public class BootReceiver extends BroadcastReceiver {
/**
* Method name: onReceive <BR>
* Description: please write your description <BR>
* Remark: <BR>
* @param context
* @param intent <BR>
*/
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Log.i("MyBootReceiver", "****** system boot completed ******");
// ****** 启动一个Service ******
Intent i= new Intent();
i.setClass(context, AndroidTestService.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(i);
}
}
}
下面简单说下开机自启动失效问题
- 系统中没有注册receiver
尽管这个问题几乎是不可能出现的,还是列出来吧,^_^
在AndroidManifest.xml中注册receiver
<receiver android:name=".receiver.BootReceiver" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
- 没有Boot权限
和上面一样,这个问题也是几乎不可能出现的
添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
- 修改之后直接关闭模拟器,然后Run as ...
Run as 是相当于先启动模拟器,然后再安装应用程序,虽然这种情况有时也会成功,但失败的情况也不少
在测试这种开机启动的应用的时候不应该直接Run as...,应该在AVD中启动模拟器,如图 - 如下图所示
这个问题烦了我很久,有这种Android实现开机自启动无效的问题,不妨参考下这种方法