java - Android 异常尝试调用虚方法 'int android.content.Context.checkPermission(java.lang.String, int, int)

标签 java android android-studio

我正在编写一个删除通话记录的应用程序。这是代码

public class PhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

    try {
        System.out.println("Receiver start");
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);


        if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
            Toast.makeText(context, "Call Idle State"+incomingNumber, Toast.LENGTH_SHORT).show();


                DeleteCallLogByNumber("97********");
                Toast.makeText(context, "Log deleted", Toast.LENGTH_SHORT).show();


        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public void DeleteCallLogByNumber(String number) {
    String queryString = "NUMBER=" + number;


    if (ActivityCompat.checkSelfPermission(MainActivity.Context(), Manifest.permission.WRITE_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    MainActivity.ContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null);
  }
}

我遇到了异常

java.lang.NullPointerException:尝试在空对象引用上调用虚方法“int android.content.Context.checkPermission(java.lang.String, int, int)”

最佳答案

我自己想出来的

 public class PhoneStateReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {

try {
    System.out.println("Receiver start");
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);


    if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
        Toast.makeText(context, "Call Idle State"+incomingNumber, Toast.LENGTH_SHORT).show();


            DeleteCallLogByNumber("97********", context);
            Toast.makeText(context, "Log deleted", Toast.LENGTH_SHORT).show();


    }
} catch (Exception e) {
    e.printStackTrace();
  }

}

public void DeleteCallLogByNumber(String number, Context context) {
String queryString = "NUMBER='" + number+"'";


if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {

    return;
}
context.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null);
 }
}

关于java - Android 异常尝试调用虚方法 'int android.content.Context.checkPermission(java.lang.String, int, int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594052/

相关文章:

java-me - Java ME 中是否提供所有 Java SE 类?

java - 了解添加到数组方法的逻辑

java - 从Java中的计算器获取结果

android - PopupWindow 中的 Horizo​​ntalScrollView

Android Studio - 请根据 com.intellij.openapi.project.IndexNotReadyException 文档更改调用者

gradle - 强制 Android Studio 下载并安装 gradle 1.10 或 1.1

java - Java中UDP数据报仅显示第一个字符

Android推送通知Urban AirShip错误: invalid authorization on platform GCM

c# - 隐藏用于 editText 焦点/触摸的软键盘

java - 无法在 Flutter 项目中找到 layout.xml