在代码走到了requestPermission的时候报了一个No virtual method requestPermissions的错误,是因为同一个类依赖了两个jar包的原因吗?
1.代码
package com.example.calendar3;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Process;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int REQUEST_PERMISSION_CODE=1;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkCalendarPermission();
queryCalendar();
}
private void queryCalendar() { ContentResolver contentResolver = getContentResolver();
Uri uri = Uri.parse("content://"+"com.android.calendar/"+"calendars");
Cursor query = contentResolver.query(uri, null, null, null, null);
String[] colunmNames =query.getColumnNames();
while (query.moveToNext()){
Log.d(TAG,"----------");
for (String colunmName : colunmNames) {
int columnIndex = query.getColumnIndex(colunmName);
query.getString(columnIndex);
}
Log.d(TAG,"----------");
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void checkCalendarPermission() {
// int readpermission = checkSelfPermission(Manifest.permission.READ_CALENDAR);
//int writepermission = checkSelfPermission(Manifest.permission.WRITE_CALENDAR);
int readpermission = checkPermission(Manifest.permission.READ_CALENDAR,android.os.Process.myPid(), Process.myUid());
int writepermission = checkPermission(Manifest.permission.READ_CALENDAR,android.os.Process.myPid(), Process.myUid());
if (readpermission!= PackageManager.PERMISSION_GRANTED||writepermission!=PackageManager.PERMISSION_GRANTED){
//表示没有权限
}else {
//去获取权限
requestPermissions(new String[]{Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR},REQUEST_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==REQUEST_PERMISSION_CODE){
if (grantResults.length==2&&grantResults[0]==PackageManager.PERMISSION_GRANTED&&grantResults[1]==PackageManager.PERMISSION_GRANTED){
//获取权限成功
Log.d(TAG,"request permission successfully");
}else {
//获取权限失败
Log.d(TAG,"request permission falied");
finish();
}
}
}
}
2.logcat的报错部分
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.calendar3, PID: 8085
java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Lcom/example/calendar3/MainActivity; or its super classes (declaration of 'com.example.calendar3.MainActivity' appears in /data/app/com.example.calendar3-1/base.apk:classes3.dex)
at com.example.calendar3.MainActivity.checkCalendarPermission(MainActivity.java:55)
at com.example.calendar3.MainActivity.onCreate(MainActivity.java:25)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
你跑在什么版本的系统上呢?
6.0以下的系统可能没有,6.0以上的系统有。如果是版本的问题,加个系统版本判断即可。