Android alarmManager.setAlarmClock崩溃Android 7 [英] Android alarmManager.setAlarmClock Crash Android 7

查看:223
本文介绍了Android alarmManager.setAlarmClock崩溃Android 7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我要设置闹钟的函数中调用alarmmanager.setAlarmClock时,我崩溃了(仅在android 7上).我不知道这是怎么了.以及如何解决这个问题 崩溃.

I am getting a crash (on android 7 only) when calling alarmmanager.setAlarmClock in a function where i am setting alarm. I have no idea what is wrong here. And how to fix this crash.

此功能在调用alarmManager.setAlarmClock时会崩溃

This is the function which is getting crash when calling 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)
            }
        }
    }

这是我要传递给以上功能的待定意图:

This is the pending intent which i am passing to above function:

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)

这是我收到的崩溃报告:

This is the crash report i am getting:

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)

推荐答案

我们在OPPO设备(Android 7)上也遇到了相同的崩溃.如果查看AlarmManagerService.Batch.class中的size()方法,则它永远不应该为null.我假设某些制造商已更改导致问题的IAlarmManager (AlarmManagerService)的实现.你对此无能为力.

We also get the same crash on OPPO devices (Android 7). If you look at size() method in AlarmManagerService.Batch.class, it NEVER should be a null. I assume some manufacturers have changed the implementation of the IAlarmManager (AlarmManagerService) which is causing the problem. You can't do anything about it.

这篇关于Android alarmManager.setAlarmClock崩溃Android 7的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆