dal*_*sam 6 java android kotlin
在我设置闹钟的函数中调用 alarmmanager.setAlarmClock 时发生崩溃(仅在 android 7 上)。我不知道这里出了什么问题。以及如何修复此崩溃。
这是调用 alarmManager.setAlarmClock 时崩溃的函数
fun setBeforeAlert(
context: Context,
offset: Long,
beforeMin: Int,
pendingIntent: PendingIntent
) {
if (offset - beforeMin * 60 * 1000 > 0) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val alarmClockInfo = AlarmManager.AlarmClockInfo((System.currentTimeMillis() + offset) - beforeMin * 60 * 1000, pendingIntent)
alarmManager.setAlarmClock(alarmClockInfo, pendingIntent)
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis() + offset) - beforeMin * 60 * 1000, pendingIntent)
}
else {
alarmManager.set(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis() + offset) - beforeMin * 60 * 1000, pendingIntent)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我传递给上述函数的未决意图:
val intent = Intent(context, AlertAlarm::class.java)
intent.putExtra(Constants.key_alert_alarm_code, reqCode)
intent.putExtra(Constants.key_alert_type, type)
intent.putExtra(Constants.key_alert_min, min)
val pi = PendingIntent.getBroadcast(context, reqCode, intent, PendingIntent.FLAG_UPDATE_CURRENT)
Run Code Online (Sandbox Code Playgroud)
这是我得到的崩溃报告:
java.lang.NullPointerException: Attempt to invoke virtual method 'int com.android.server.AlarmManagerService$Batch.size()' on a null object reference
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3377)
at android.app.ActivityThread.-wrap18(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1800)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:232)
at android.app.ActivityThread.main(ActivityThread.java:6802)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1103)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.android.server.AlarmManagerService$Batch.size()' on a null object reference
at android.os.Parcel.readException(Parcel.java:1714)
at android.os.Parcel.readException(Parcel.java:1661)
at android.app.IAlarmManager$Stub$Proxy.set(IAlarmManager.java:246)
at android.app.AlarmManager.setImpl(AlarmManager.java:680)
at android.app.AlarmManager.setAlarmClock(AlarmManager.java:601)
at com.mypackage.util.AlarmUtils.setBeforeAlert(AlarmUtils.kt:42)
at com.com.mypackage.util.AzanUtils.setBeforeAlertAlarms(AzanUtils.kt:358)
at com.com.mypackage.util.AzanUtils.setAlarms(AzanUtils.kt:160)
Run Code Online (Sandbox Code Playgroud)
我们在 OPPO 设备(Android 7)上也遇到了同样的崩溃。如果您查看size()中的方法AlarmManagerService.Batch.class,它永远不应该为空。IAlarmManager (AlarmManagerService)我认为一些制造商已经改变了导致问题的实现。你对此无能为力。
Jak*_*ain -2
确保您的alarmManager不为空,如下所示。
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (alarmManager != null){
// do your stuff here.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |