Android N呼叫阻止号码未获取

时间:2016-12-07 06:45:30

标签: android telephony

我想在android N中获取调用块编号,我想知道给定的是否为块编号(例如: - 5554模拟器编号)

我们已经提供了通讯录,短信,手机状态权限以允许访问该区号,我跟随“Android Developer”网站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:调用者必须是系统,默认拨号程序或默认SMS应用程序。 请发表评论,如果发表评论并感谢提前。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

添加其他检查

 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

让你成为默认拨号器

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