【问题标题】:How to make repeating alarm manager in api level 17?如何在 api 级别 17 中制作重复警报管理器?
【发布时间】:2018-08-13 04:50:03
【问题描述】:


我已经研究这个功能好几个星期了,但我不知道这个功能有什么问题。我在 API 级别 25 的模拟器中对其进行了测试,并且它可以工作,但是当我在 API 级别 17 上运行它时,它无法正常工作。你能告诉我我的代码有什么问题吗?

MainActivity.java

private void startAutoSettlement() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 2);
    calendar.set(Calendar.MINUTE, 55);
    calendar.set(Calendar.SECOND, 1);

    Intent intent = new Intent(getApplicationContext(), FirstReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

}

FirstReceiver.class

public class FirstReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context, SettlementActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}}

清单

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-feature android:name="android.hardware.usb.host" />

<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.SET_ALARM" />

<application
    android:name=".core.CoreApplication"
    android:allowBackup="true"
    android:icon="@drawable/vidiaprint_logo"
    android:label="@string/app_name"
    android:roundIcon="@drawable/vidiaprint_logo"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:launchMode="singleTask"
        android:stateNotNeeded="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <receiver android:name=".receiver.FirstReceiver" />

</application>

谢谢

【问题讨论】:

  • 向我们展示您的错误或 logcat
  • 没有错误,只是不工作
  • 向我们展示您的清单
  • 我已经添加了我的清单

标签: android alarmmanager android-4.2-jelly-bean android-7.1-nougat


【解决方案1】:

用于重复报警管理器

public static void startAlarmBroadcastReceiver(Context context) {
    Intent _intent = new Intent(context, AlarmBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, _intent, 0);
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 0);

if (Build.VERSION.SDK_INT >= 19){
alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
 }else{
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
}
}

报警广播接收器

AndroidManifest中,定义类为

<receiver android:name=".AlarmBroadcastReceiver" >
</receiver>

而且代码会是这样的

public class AlarmBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context, SettlementActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);

}
}

【讨论】:

  • 每天重复吗?还是只有一次?
  • 每天重复一次
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多