下面的代码是当开启设备时,启动程序:
public class BootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.i("BootReceiver","intent received");
Intent myIntent = new Intent(context, ACT_Home.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
}
在Manifest (as child)中:
<receiver android:name="host.alarmmanager.BootReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
在 Manifest 中的权限:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
代码在 Android 3.2.2 中可以很好的运行,但是把相同的代码在 Android 4.0.3 中运行时,broadcast 接受器不能接受到任何东西,而且 onReceive 方法中的第一行也没有执行。这是什么错误啊?
该回答引用ChatGPT
在 Android 3.2.2 中,您的代码可以正常工作,但在 Android 4.0.3 中无法正常工作。这可能是由于 Android 4.0.3 中引入了一些更严格的安全限制所致,这些限制可以阻止您的应用程序在设备启动时运行。
为了解决这个问题,您可以尝试以下方法:
确保您的应用程序已经被安装并在设备上运行过,否则您的 broadcast 接收器将不会收到任何东西。
检查您的应用程序是否拥有 "android.permission.RECEIVE_BOOT_COMPLETED" 权限,如果没有,请添加它。
检查您的 broadcast 接收器是否被正确注册在您的 AndroidManifest.xml 文件中,并且它的 intent-filter 中包含了 "android.intent.action.BOOT_COMPLETED" 操作。
尝试在 onReceive() 方法中添加一些日志,以便更好地理解程序的执行情况,比如您可以在 onReceive() 方法中添加一个日志语句,以确保代码已经执行。
如果这些方法都没有解决您的问题,请尝试使用 adb logcat 命令获取设备日志,并查找与您的应用程序相关的日志,以查找更多的信息和提示。