BOOT_COMPLETED 未在设备中调用
BOOT_COMPLETED is not getting called in device
我想在设备启动时启动警报,为此我已经完成了以下操作
1) 用户权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2) 在清单文件中添加具有意图操作的接收器
<receiver
android:name=".sms.BootReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
3) 来源
public class BootReceiver extends BroadcastReceiver {
private AlarmManager dayAlarmMgr;
private PendingIntent dayAlarmIntent;
private NotificationManager mNotificationManager;
private NotificationCompat.Builder builder;
private Context context;
public static final int NOTIFICATION_ID = 2;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
}
}
}
以上代码在 genymotion 中有效,但在真实设备上无效
android:name=".sms.BootReceiver"
而不是使用
android:name=".BootReceiver"
或者
android:name="complete.packagename.sms.BootReceiver"
希望这能解决您的问题。
问题是android:name=".sms.BootReceiver"
,应该是android:name=".BootReceiver"
。但有些设备无法捕获 BOOT_COMPLETED
。您的 intent-filter
应该如下所示:
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
别忘了编辑您的来源:
if ((intent.getAction().equals("android.intent.action.BOOT_COMPLETED")
|| intent.getAction().equals("android.intent.action.QUICKBOOT_POWERON")
|| intent.getAction().equals("com.htc.intent.action.QUICKBOOT_POWERON"))){
Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
}
<receiver android:name="your.package.example.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
确保您的 Application.From Android 中至少有一个 activity 3.1,在用户手动启动 activity 之前,BroadcastReceiver 将无法工作,这是为提供安全。一旦用户 运行 第一次使用该应用程序,那么您的 BroadcastReceiver 将始终 运行 除了它不会强制停止它。一旦 activity 首次启动,您的广播接收器将 运行 即使在重新启动您的设备后也是如此。
在模拟器上它正在工作-这可能是因为它在低于 3.1 的版本上 运行ning 和高于 3.1
的真实设备 运行
感谢您的帮助,但最终我能够 android.intent.action.BOOT_COMPLETED
通过将 android:installLocation="internalOnly"
设置为存储在内部存储器中的应用程序的启动完成触发。
我想在设备启动时启动警报,为此我已经完成了以下操作
1) 用户权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2) 在清单文件中添加具有意图操作的接收器
<receiver
android:name=".sms.BootReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
3) 来源
public class BootReceiver extends BroadcastReceiver {
private AlarmManager dayAlarmMgr;
private PendingIntent dayAlarmIntent;
private NotificationManager mNotificationManager;
private NotificationCompat.Builder builder;
private Context context;
public static final int NOTIFICATION_ID = 2;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
}
}
}
以上代码在 genymotion 中有效,但在真实设备上无效
android:name=".sms.BootReceiver"
而不是使用
android:name=".BootReceiver"
或者
android:name="complete.packagename.sms.BootReceiver"
希望这能解决您的问题。
问题是android:name=".sms.BootReceiver"
,应该是android:name=".BootReceiver"
。但有些设备无法捕获 BOOT_COMPLETED
。您的 intent-filter
应该如下所示:
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
别忘了编辑您的来源:
if ((intent.getAction().equals("android.intent.action.BOOT_COMPLETED")
|| intent.getAction().equals("android.intent.action.QUICKBOOT_POWERON")
|| intent.getAction().equals("com.htc.intent.action.QUICKBOOT_POWERON"))){
Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
}
<receiver android:name="your.package.example.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
确保您的 Application.From Android 中至少有一个 activity 3.1,在用户手动启动 activity 之前,BroadcastReceiver 将无法工作,这是为提供安全。一旦用户 运行 第一次使用该应用程序,那么您的 BroadcastReceiver 将始终 运行 除了它不会强制停止它。一旦 activity 首次启动,您的广播接收器将 运行 即使在重新启动您的设备后也是如此。
在模拟器上它正在工作-这可能是因为它在低于 3.1 的版本上 运行ning 和高于 3.1
的真实设备 运行感谢您的帮助,但最终我能够 android.intent.action.BOOT_COMPLETED
通过将 android:installLocation="internalOnly"
设置为存储在内部存储器中的应用程序的启动完成触发。