我创建了一个启动接收器类:
public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d("Boot receiver","Working")
}
}
我的清单文件:
<receiver android:name="com.voonik.android.receivers.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
许可:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
我使用了adb命令 - am broadcast -a android.intent.action.BOOT_COMPLETED
我仍然无法确定它是否正常工作。我该如何测试?
答案 0 :(得分:0)
我认为你在接收时错过了@Override。
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Boot receiver","Working")
}
在我的清单中我有;
<receiver
android:name=".BootUpReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
和
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
在BootUpReceiver.java中我有;
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, Main.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
您应该只能看到登录logcat,尝试使用System.out.println("BOOT RECEIVED");
而不是Log
答案 1 :(得分:0)
请记住,软件包具有不同的状态(主要更改来自Android 3.1)。
如果用户没有自己打开应用程序(至少一次),那么您的程序包将无法获得此意图。
否则,在没有用户交互的情况下运行一些恶意代码将非常容易。
出于安全考虑,您可以想象。 在那里,您可以找到更多信息:Trying to start a service on boot on Android
除非您将APK放在/system/apps
文件夹中,否则将使用系统证书对其进行签名。
P.S。:你可以通过意图传递一些旗帜,对你来说可能很有意思FLAG_INCLUDE_STOPPED_PACKAGES