gpt4 book ai didi

java - 使用内容提供程序获取日历实例

转载 作者:行者123 更新时间:2023-12-01 17:43:24 25 4
gpt4 key购买 nike

我正在尝试实现日历实例查询 https://developer.android.com/guide/topics/providers/calendar-provider#query-instances但是当我运行代码时,我的光标返回 null。我已经删除了选择参数,以便它应该返回查询范围内的所有实例,但仍然没有运气。我什至将范围设置为回顾 2 年(其中日历中有很多事件),但它仍然返回 null。执行下面的代码时有人遇到同样的问题吗?

package com.strath.keepfitct.utils;

import android.Manifest;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CalendarContract;
import android.util.Log;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;

public class CalendarManager
{
private static final int PERMISSION_REQUEST_CODE = 1;
private static final String DEBUG_TAG = "CalendarManager";

private static final String[] INSTANCE_PROJECTION = new String[]
{
CalendarContract.Instances.EVENT_ID, // 0
CalendarContract.Instances.BEGIN, // 1
CalendarContract.Instances.TITLE, // 2
CalendarContract.Instances.END, // 3
};

private static final int PROJECTION_ID_INDEX = 0;
private static final int PROJECTION_BEGIN_INDEX = 1;
private static final int PROJECTION_TITLE_INDEX = 2;
private static final int PROJECTION_END_INDEX = 3;


public static void getEvents(Context context)
{
Cursor cursor = null;
ContentResolver contentResolver = context.getContentResolver();

long startTime = LocalDateTime.now().minusMonths(24).toEpochSecond(OffsetDateTime.now().getOffset());
long endTime = LocalDateTime.now().plusHours(24).toEpochSecond(OffsetDateTime.now().getOffset());

Uri.Builder builder = CalendarContract.Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, startTime);
ContentUris.appendId(builder, endTime);

// String selection = CalendarContract.Instances.EVENT_ID + " = ?";
// String[] selectionArgs = new String[] {"207"};

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CALENDAR)
!= PackageManager.PERMISSION_GRANTED)
{
Log.d("permission", "permission denied to READ_CALENDAR - requesting it");

ActivityCompat.requestPermissions((Activity) context, new String[] {Manifest.permission.READ_CALENDAR}, PERMISSION_REQUEST_CODE);
}
else
{
Log.d("Content URI", builder.build().toString());
cursor = contentResolver.query(builder.build(),
INSTANCE_PROJECTION,
null,
null,
null);

while (cursor.moveToNext())
{
String title = null;
long eventID = 0;
long beginVal = 0;

// Get the field values
eventID = cursor.getLong(PROJECTION_ID_INDEX);
beginVal = cursor.getLong(PROJECTION_BEGIN_INDEX);
title = cursor.getString(PROJECTION_TITLE_INDEX);

// Do something with the values.
Log.i(DEBUG_TAG, "Event: " + title);
LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochSecond(beginVal), TimeZone.getDefault().toZoneId());
Log.i(DEBUG_TAG, "Date: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
}
}
}
}

最佳答案

我的问题是,在将 LocalDateTime 参数转换为长纪元秒后,我没有按照预期将它们转换为毫秒!快速乘以 1000 解决了这个问题。

long startTime = LocalDateTime.now().minusMonths(24).toEpochSecond(OffsetDateTime.now().getOffset()) * 1000;

关于java - 使用内容提供程序获取日历实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60906624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com