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" 设置为存储在内部存储器中的应用程序的启动完成触发。