package com.example.calendarproviderdemo;
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.util.Log;
import java.security.Permission;
@RequiresApi(api = Build.VERSION_CODES.M)
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkCalendarPermission();
getCalenderProvider();
}
private void getCalenderProvider() {
ContentResolver contentResolver = getContentResolver();
Uri uri = Uri.parse("content://com.android.calendar/calendars");
Cursor cursor = contentResolver.query(uri, null, null, null, null);
String[] columnNames = cursor.getColumnNames();
for(String name:columnNames)
{
Log.d(TAG, "getCalenderProvider: "+name);
}
while (cursor.moveToNext()){
Log.d(TAG, "-----------------------------");
for (String name:columnNames)
{
Log.d(TAG, cursor.getString(cursor.getColumnIndex(name)));
}
}
}
private void checkCalendarPermission() {
int readPermission = checkSelfPermission(Manifest.permission.READ_CALENDAR);
int writePermission = checkSelfPermission(Manifest.permission.WRITE_CALENDAR);
if (readPermission == PackageManager.PERMISSION_GRANTED && writePermission == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "有权限,无需申请");
} else {
requestPermissions(new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR}, PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==PERMISSION_REQUEST_CODE)
{
if(grantResults.length==2 && grantResults[0]==PackageManager.PERMISSION_GRANTED && grantResults[1]==PackageManager.PERMISSION_GRANTED)
{
Log.d(TAG, "权限申请成功");
}else{
Log.d(TAG, "权限申请失败");
finish();
}
}
}
}

只能获取日历的属性信息,却获取不到属性的值,不输出任何内容,也不报错。
当打印具体某个属性值当时候,报错
Log.d(TAG, cursor.getString(cursor.getColumnIndex("sync_events")));

因为你用的是模拟器,所以只能获取属性信息,而没有属性的值,你换成真机就好了