首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TelephonyManager.EXTRA_INCOMING_NUMBER在Android 9上总是空的。

TelephonyManager.EXTRA_INCOMING_NUMBER在Android 9上总是空的。
EN

Stack Overflow用户
提问于 2019-04-11 13:52:07
回答 2查看 3.7K关注 0票数 1

在Android 9上,呼叫:

代码语言:javascript
复制
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

总是返回null,我如何在Android 9下修复这个问题?它适用于我的旧版本。这几天我怎么知道来电号码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-11 13:56:36

您需要先授予READ_PHONE_STATEREAD_CALL_LOG权限,然后为两个广播做好准备--一个没有记录在这里号。

如果接收应用程序具有Manifest.permission.READ_CALL_LOG和Manifest.permission.READ_PHONE_STATE权限,它将两次接收广播;一个带有电话号码的EXTRA_INCOMING_NUMBER,另一个是空的。

票数 8
EN

Stack Overflow用户

发布于 2020-01-18 12:34:48

也是

代码语言:javascript
复制
 public void onReceive(Context context, Intent intent) {

        //We listen to two intents.  The new outgoing call only tells us of an outgoing call.  We use it to get the number.
        if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {
            savedNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
        }
        else{
            String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
            String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
            int state = 0;
            if(stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)){
                state = TelephonyManager.CALL_STATE_IDLE;
            }
            else if(stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                state = TelephonyManager.CALL_STATE_OFFHOOK;
            }
            else if(stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)){
                state = TelephonyManager.CALL_STATE_RINGING;
            }
          if (number != null && !number.isEmpty() && !number.equals("null")) {
                onCallStateChanged(context, state, number);
                Log.d("TEST :","NUMBER =>"+number);
                return; 
            }

        }
    }

MainActivity

代码语言:javascript
复制
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SYSTEM_ALERT_WINDOW) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this,
            new String[]{Manifest.permission.READ_CALL_LOG, Manifest.permission.SYSTEM_ALERT_WINDOW},
            1);
}

清单

代码语言:javascript
复制
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    <uses-permission android:name="android.permission.READ_CALL_LOG"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55634155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档