的Android N通话阻塞号码没有得到

问题描述:

我想在Android的N到获得通话块号,我想知道定是块数或不(例如: - 5554模拟器号)的Android N通话阻塞号码没有得到

联系人,短信,手机状态权限已被允许访问块号,我跟着“Android开发者”网站https://developer.android.com/reference/android/provider/BlockedNumberContract.html

但我无法获取块号,我使用最新的android studio 2.2.2并检查了功能在Android N仿真器中,我没有设备。 这是我的代码。

public class MainActivity extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 

    // Button onclick method to show the logs 

    public void displayBlockCursorCount(View view) { 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 

       String number = "5552"; 
      if (BlockedNumberContract.canCurrentUserBlockNumbers(MainActivity.this)) { 
         if (BlockedNumberContract.isBlocked(MainActivity.this, number)) { 
          Log.e(TAG, "given number is blocked >>>>>> " + number); 
         } 
        } 
       } 
    } 
} 

我收到 java.lang.SecurityException异常:调用者必须是系统默认的拨号器或默认的短信应用。 请发表评论,如果下来评论和感谢提前。

要访问被阻止的联系人,您的应用程序应该默认调用应用程序或消息应用程序,否则会引发安全异常。

添加额外的检查

private boolean isAppAsDefaultDialer() { 
    TelecomManager telecom = mContext.getSystemService(TelecomManager.class); 

    if (getApplicationContext().getPackageName().equals(telecom.getDefaultDialerPackage())) { 
     return true; 
    } 
    return false; 
} 

或检查源https://android.googlesource.com/platform/packages/providers/BlockedNumberProvider/+/android-7.0.0_r1/src/com/android/providers/blockednumber/BlockedNumberProvider.java

并让你的应用程序作为defaul拨号

 <intent-filter> 
      <action android:name="android.intent.action.DIAL"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:scheme="tel"/> 
     </intent-filter>