【问题标题】:TelephonyManager.EXTRA_INCOMING_NUMBER always null on Android 9TelephonyManager.EXTRA_INCOMING_NUMBER 在 Android 9 上始终为空
【发布时间】:2020-01-18 20:34:48
【问题描述】:

在 Android 9 上调用:

String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

总是返回null,我该如何在Android 9下解决这个问题?它适用于我的旧版本。 这些天,我如何获得来电号码?

【问题讨论】:

  • 您正在使用广播接收器 ryt 吗?在那里onIncomingCallStarted(contex..) 将被触发两次..第一次数字将是 null,而 第二次你会得到它..
  • 在第二次调用时它也为空。
  • 您拥有 ryt 权限
  • 你能在google play store上发布吗?

标签: android android-9.0-pie


【解决方案1】:

您需要先授予READ_PHONE_STATEREAD_CALL_LOG 权限,然后准备好进行两次广播 - 一次没有编号为documented here

如果接收应用有 Manifest.permission.READ_CALL_LOG 和 Manifest.permission.READ_PHONE_STATE 权限,它将收到 广播两次;一个 EXTRA_INCOMING_NUMBER 填充了 电话号码,另一个空白。

【讨论】:

  • 是的,我崩溃了,我发现广播接收器执行了两次。一个是空号,一个是数字,所以我也必须处理。
【解决方案2】:

还有

 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; 
            }

        }
    }

主活动

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);
}

清单

   <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"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多