我有一个应用程序,可以拨打特定号码的列表。
这是我的“宣言”中的接收器:
        <receiver android:name=".manager.sos.CallReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>这样,我就可以准确地知道调用的时间和结束的时间。当一个调用结束时,我会在"onOutgoingCallEnded“方法被调用之后进行一个新的调用。方法"onOutgoingCallEnded",通过我的CallReceiver调用,基于TelephonyManager状态:EXTRA_STATE_IDLE,EXTRA_STATE_OFFHOOK,EXTRA_STATE_RINGING...因此,如果不调用CallReceiver,我就不会到达"onOutgoingCallEnded“方法
我的问题从Android6.0(棉花糖)开始,因为即使用户允许呼叫,他也可以随时在App Settings上撤销它。
因此,当进行调用时,用户拒绝许可,我看不到我的"onOutgoingCallEnded“方法被调用,因为我失去了检查调用状态的权限。
那么,我怎么知道我失去了检查呼叫的权限呢?
发布于 2016-08-10 20:50:31
那么我怎么知道我失去了检查呼叫的权限呢?
你不需要,至少不是马上。当您失去权限时,Android将终止您的进程。它不会在你的应用程序上调用任何方法来告诉你你失去了权限。
你只会发现你的代码由于其他原因运行(例如,用户点击你的启动器图标),在那里你可以调用checkSelfPermission()来查看你是否仍然拥有权限。
您的场景并不常见,但它反映了运行时权限系统IMHO中的一个漏洞。理想情况下,您会发现您的接收器将不再接收此类广播。
发布于 2016-08-10 20:50:31
当发起调用时,可能会调用活动的pause方法,当用户返回到应用程序时,将调用活动的resume方法,因此您可以在onResume中检查权限,如果用户已撤销权限,您将能够了解它
发布于 2016-08-10 20:35:43
看起来你已经回答了你自己的问题。最简单的方法(在我看来)是检查onOutgoingCallEnded()方法是否正在被调用,以了解您是否失去了检查调用状态的权限。
https://stackoverflow.com/questions/38873571
复制相似问题