1

我希望我的闹钟在设备重启后恢复/重启。在对 Google 进行大量研究后,我发现如果不将警报保存到数据库,它就无法工作。我有两个问题:

2.我应该如何在重新启动时从数据库中读取警报,因为广播接收器没有收到 BOOT_COMPLETED 意图。

1.如何将警报保存到数据库(如何知道数据库已创建并插入值)?

EDIT:

我已经拥有必要的权限和接收者以及此代码:告诉我要在此代码中更改什么?MainActivity.java

 onClick:

int intHrs = SetResetIntervalActivity.intHours;
        int intMins = SetResetIntervalActivity.intMinutes;
        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.HOUR_OF_DAY, intHrs);
        calendar.set(Calendar.MINUTE, intMins);
        calendar.set(Calendar.SECOND, 0);

        Intent myIntent = new Intent(
                "com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE");
        myIntent.putExtra("FLAG_KEY", false);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, myIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) this
                .getSystemService(Context.ALARM_SERVICE);

        calendar.setTimeInMillis(System.currentTimeMillis());

        calendar.add(Calendar.SECOND, 10);
        long interval = intHrs * 3600000 + intMins * 60000;
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(), interval, pi);
        long mins = interval / 60000;
        Toast.makeText(
                MainActivity.this,
                "Data Connection will be reset every " + mins
                        + " minute(s).", Toast.LENGTH_SHORT).show();

广播接收器:

 @Override
public void onReceive(Context context, Intent intent) {

   if (intent.getAction().equalsIgnoreCase(
            "android.intent.action.BOOT_COMPLETED")) {
 //control never enters here

        boolean blnVar=true;
        blnVar=false;
               ....

显现:

  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <receiver
        android:name="com.sang.mobiledata.ResetBroadcastReceiver"
        android:exported="true" >
        <intent-filter>
            <action android:name="com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.sang.mobiledata.IntentAction.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
4

2 回答 2

1

当您在特定时间设置警报时,将小时、分钟、秒和警报 ID 的值保存在 sqlite 数据库中。重新启动后,从广播启动服务并在该服务的 onStart() 方法中检索警报值并再次使用挂起设置警报意图。

欢迎您询问是否有任何进一步的疑问。

于 2013-11-19T12:44:28.797 回答
0

您可以在设备启动时重新设置警报,而不是将警报保存到数据库,如下所示,

// 广播接收器

public class StartApplication extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        // TODO Auto-generated method stub
        context.startService( new Intent ( context, AlarmService.class ) );
    }
}

// 报警类

public class AlarmService extends Service
{
    @Override
    public int onStartCommand ( Intent intent,int flags, int startId )
    {
        Intent alarmIntent = new Intent ( this,RepeaterService.class );
        PendingIntent pendingIntent = PendingIntent.getService( this, 0, alarmIntent, 0 );

        AlarmManager alarm = ( AlarmManager )getSystemService( Context.ALARM_SERVICE );
        alarm.setRepeating( AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60*1000, pendingIntent );

        return Service.START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) 
    {
        // TODO Auto-generated method stub
        return null;
    }
}

您需要在 AndroidManifest.xml 中添加以下权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

并按照您可以在 AndroidManifest.xml 中声明 BroadcastReceiver 的方式,

<receiver android:name="com.example.stackoverflow.StartApplication" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
于 2013-11-19T11:54:35.217 回答