如何在设备启动时启动服务(autorun app等)
首先:自版本Android 3.1+你不会收到BOOT_COMPLETE如果用户从未启动你的应用程序至少一次或用户“强制关闭”应用程序。
这样做是为了防止恶意软件自动注册服务。这个安全漏洞在最新版本的Android中已经被修补。
解决方案:
创建带有活动的应用程序。当用户运行它一次应用程序可以收到BOOT_COMPLETE广播消息。
第二:在挂载外部存储之前发送BOOT_COMPLETE。如果app被安装到外部存储,它不会收到BOOT_COMPLETE广播消息。
在这种情况下,有两个解决方案:
将应用程序安装到内部存储
在内部存储中安装另一个小应用程序。这个应用程序接收BOOT_COMPLETE并在外部存储上运行第二个应用程序。
如果你的应用程序已经安装在内部存储中,那么下面的代码可以帮助你理解如何在设备启动时启动服务。
在Manifest.xml
许可:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
注册你的BOOT_COMPLETED接收器:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
注册您的服务:
<service android:name="org.yourapp.YourCoolService" />
在接收器OnBoot.java中:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
对于HTC,如果设备没有捕获RECEIVE_BOOT_COMPLETED,你可能还需要在Manifest中添加这段代码:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
接收器现在看起来是这样的:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
如何测试BOOT_COMPLETED没有重新启动模拟器或真实设备?
很容易。试试这个:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
如何获取设备id?获取带有id的连接设备列表:
adb devices
默认情况下,您可以在ADT中找到:
adt-installation-dir/sdk/platform-tools
享受!)