当前位置: 首页 > 知识库问答 >
问题:

电话管理员。在targetSdkVersion设置为31或android 12后,监听不工作

隆功
2023-03-14

在我将targetSdkVersion升级到31 telephonyManager之后。听着,这不管用。考虑下面的代码行:

电话管理员。监听(phoneStateListener,phoneStateListener.listen\u CALL\u STATE);

Logas错误信息如下:

2022-02-27 13:51:36.313 6426-6426/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 6426
java.lang.RuntimeException: Unable to start service com.example.app.myPlayService@7ace64e with Intent { cmp=com.example.app/.myPlayService (has extras) }: java.lang.SecurityException: listen
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4657)
    at android.app.ActivityThread.access$2000(ActivityThread.java:247)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2091)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7839)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
 Caused by: java.lang.SecurityException: listen
    at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)
    at android.os.Parcel.createException(Parcel.java:2409)
    at android.os.Parcel.readException(Parcel.java:2392)
    at android.os.Parcel.readException(Parcel.java:2334)
    at com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenWithEventList(ITelephonyRegistry.java:1036)
    at android.telephony.TelephonyRegistryManager.listenFromListener(TelephonyRegistryManager.java:250)
    at android.telephony.TelephonyManager.listen(TelephonyManager.java:5999)
    at com.example.app.myPlayService.onStartCommand(myPlayService.java:186)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4639)
    at android.app.ActivityThread.access$2000(ActivityThread.java:247) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2091) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loopOnce(Looper.java:201) 
    at android.os.Looper.loop(Looper.java:288) 
    at android.app.ActivityThread.main(ActivityThread.java:7839) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
 Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.internal.telephony.TelephonyPermissions.enforceCarrierPrivilege(TelephonyPermissions.java:634)
    at com.android.internal.telephony.TelephonyPermissions.checkReadPhoneState(TelephonyPermissions.java:149)
    at com.android.internal.telephony.TelephonyPermissions.checkCallingOrSelfReadPhoneState(TelephonyPermissions.java:94)
    at com.android.server.TelephonyRegistry.checkListenerPermission(TelephonyRegistry.java:3093)
    at com.android.server.TelephonyRegistry.listen(TelephonyRegistry.java:1024)

我在Android Manifiest文件上添加了以下权限,但仍然不起作用。

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

在将目标锁定在31岁以下或Android12岁以下之前,它工作得非常好。如何在Android SDK 31上解决这个问题?提前谢谢。

共有1个答案

穆承运
2023-03-14

我就是这么做的:

    private suspend fun updateServiceState() {
        withContext(Dispatchers.Main) {
            telephonyManager.listen(object : PhoneStateListener() {
                override fun onServiceStateChanged(state: ServiceState) {
                    telephonyManager.listen(this, LISTEN_NONE)
                    ...
                }
            }, PhoneStateListener.LISTEN_SERVICE_STATE)

        }
    }

我的目标是Android 12和API 31,我没有READ_PHONE_STATE许可

 类似资料:
  • 一、简介   “设置"用于PHPCMS管理员帐号维护。 二、功能演示 管理员管理 角色管理

  • 这只是一个例子。我有一个输入流,我想为它设置一个侦听器。我怎么能做到。第一种方法是创建一个后台线程,反复检查它。 但我认为没有线。睡眠会浪费cpu周期。和它一起;它会降低获取事件的准确性。假设输入流是一个无法访问的输出流正在写入的文件。这只是一个例子,说明我不知道这种后台线程的运行时成本。请解释一下。

  • 进入企业管理页面,企业管理-设置管理员-新增/取消管理员

  • 我已经集成了群呼jitsi_flutter。但是,该应用程序没有安装在最新的android支持版本12中。 这是我使用过的jitsi_flutter的链接。https://github.com/gunschu/jitsi_meet 我在android 12支持的设备上运行应用程序时遇到了这个问题。 adb: 无法安装 E:\\flutter\flutter_jitsi\build\app\输出\飘

  • 主要内容:本节引言:,1.获得TelephonyManager的服务对象,2.用法示例,3.本节示例代码下载,本节小结:本节引言: 本章节是Android基础入门教程的最后一章,主要讲解是一些零零散散的一些知识点,以及一些遗漏 知识点的补充,这些零散的知识点包括,各种系统服务的使用,比如本节的电话管理器,短信管理器, 振动器,闹钟,壁纸等等,还有传感器之类的东西!乱七八糟什么都有哈!好的,本节我们要学习的 是TelephonyManager,见名知义:用于管理手机通话状态,获取电话信息(设备信息

  • 我有一个带有按钮的JFrame。当用户按下按钮时,将执行一系列耗时的操作。我在表格上有一个JLabel,上面写着“请稍候”,我想在执行操作时变得可见,然后在完成时变得不可见。因此,我将放在动作侦听器的开头,放在末尾,但没有任何反应。 似乎标签的显示正在排队,直到操作完成,所以它只是可见,然后立即不可见。在继续操作侦听器中的其余代码之前,如何确保标签变为可见?