5

我想在设备启动时启动警报,因为我已经完成了以下工作

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中工作,但不在真实设备上

4

5 回答 5

3

android.intent.action.BOOT_COMPLETED感谢您的帮助,但最后我能够通过将存储在内部存储器中的应用程序设置android:installLocation="internalOnly"为启动完成火来使其工作。

于 2015-01-29T17:05:48.167 回答
1

问题是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();
}
于 2015-01-22T11:09:01.410 回答
0
  android:name=".sms.BootReceiver"

而不是那种用途

android:name=".BootReceiver"

或者

android:name="complete.packagename.sms.BootReceiver"

希望这能解决您的问题。

于 2015-01-22T11:07:56.510 回答
0

确保您的应用程序中存在至少一个活动。从 Android 3.1 开始,BroadcastReceiver 在用户手动启动活动之前将无法工作,这是为了提供安全性。一旦用户第一次运行该应用程序,那么您的 BroadcastReceiver 将始终运行,除非它不强制停止它。首次启动活动后,即使重新启动设备,您的广播接收器也会运行。

在模拟器上它正在工作-可能是因为它运行在低于​​ 3.1 的版本上,而真实设备运行在高于 3.1 的版本上

于 2015-01-22T12:13:48.087 回答
-1
<receiver android:name="your.package.example.BootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
于 2015-01-22T11:15:48.630 回答