我正在尝试编写一些代码,可以判断事件的提醒是否已更改(添加或删除),但我发生了奇怪的事情。而不是删除或更改提醒,似乎正在删除并重新添加事件!我的代码不正确吗?或者这是真的发生了什么?
要测试这一点,您需要:
使用提醒创建活动
点击同步模拟器后的按钮
删除活动提醒
等到更改同步到您的模拟器,然后再次单击该按钮
JAVA CODE
package com.example.remindertest;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CalendarContract.CalendarAlerts;
import android.provider.CalendarContract.Events;
import android.provider.CalendarContract.Instances;
import android.provider.CalendarContract.Reminders;
import android.util.Log;
import android.view.View;
public class ReminderActivity extends Activity
{
final static public String TAG = "ReminderActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Add button
setContentView(R.layout.reminder_activity);
Log.d(TAG, "Started");
}
public void onClick(View v)
{
Cursor cursor = getContentResolver().query(
Reminders.CONTENT_URI,
null, null, null, null
);
String str = "";
/*
* Some crappy code to test this
*/
while ( cursor.moveToNext())
{
int eventId = cursor.getInt(cursor.getColumnIndex(Reminders.EVENT_ID));
Cursor eCursor = getContentResolver().query(
Events.CONTENT_URI,
new String[] { Events._ID, Events.TITLE },
"_id = ?", new String[] {"" + eventId}, ( String ) null);
eCursor.moveToNext();
String title = eCursor.getString(eCursor.getColumnIndex(Events.TITLE));
str += eventId + " = " + title + " = " +
cursor.getInt(cursor.getColumnIndex(Reminders._ID)) + " = " +
cursor.getInt(cursor.getColumnIndex(Reminders.METHOD)) + " = " +
cursor.getLong(cursor.getColumnIndex(Reminders.MINUTES)) + "\n";
}
Log.d(TAG, str);
}
}
布局XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ReminderActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="98dp"
android:onClick="onClick"
android:text="Button" />
</RelativeLayout>
MANIFEST XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.remindertest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.remindertest.ReminderActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
答案 0 :(得分:0)
不,你的代码是正确的。在我的6台设备上完全相同 - 当您编辑它时,事件会更改它的ID(可能是重新创建)。顺便说一句,当您更改活动的时间,标题,位置或任何其他细节时,也会发生这种情况 - 而不仅仅是提醒。有趣的是,它并不总是发生 - 只是有时候。但通常2-3次编辑事件就足以模拟这种行为。
我不太清楚为什么事件会经常更改其ID,但基于此我会说,该事件的id不应该用作唯一标识符。