我使用未记录的API来为Android OS 2.2添加日历事件.现在Android OS 4已经出局,我自然使用的API不起作用!我查看了关于14级日历api的Android SDK,但是我无法在我使用Android OS 2.2创建的项目中找到如何使用它的线索.因为当我CalendarContract在我的项目中使用类时,它显示错误.所以我无法在我使用Android OS 2.2创建的项目中找到线索以及如何使用此类的线索.
如果有人要分享任何样品或样品链接,请告诉我.
日历Api类
public abstract class CalendarAPI
{
private static CalendarAPI api;
public static CalendarAPI getAPI()
{
String apiClass;
if (Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.FROYO) {
apiClass = "com.example.calendar.CycleManagerSDK8 ";
} else {
apiClass = "com.example.calendar.CycleManagerSDK14 ";
}
try
{
Class<? extends CalendarAPI> realClass = Class.forName(apiClass).asSubclass(CalendarAPI.class);
api = realClass.newInstance();
}
catch (Exception e)
{
throw new IllegalStateException(e);
}
return api;
}
public abstract boolean setAlertOnDevice(Context c) ;
}
Run Code Online (Sandbox Code Playgroud)
SDKVersion 8 - 13的类
public class CycleManagerSDK8 extends CalendarAPI
{
public boolean setAlertOnDevice(Context c)
{
Resources res = c.getResources();
Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events");
Uri REMINDERS_URI = Uri.parse("content://com.android.calendar/" + "reminders");
ContentResolver cr = c.getContentResolver();
Date dtStartDate = getStartDate();
Calendar cal = Calendar.getInstance();
cal.setTime(dtStartDate);
cal.add(Calendar.DATE, m_iStart);
cal.set(Calendar.HOUR_OF_DAY, 8);
cal.set(Calendar.MINUTE, DEFAULT_TIME_OF_DATE);
cal.set(Calendar.SECOND, DEFAULT_TIME_OF_DATE);
cal.set(Calendar.MILLISECOND, DEFAULT_TIME_OF_DATE);
String str = m_reminderText + res.getString(R.string.alert_start);
m_strDescription = res.getString(R.string.alert_start_msg);
ContentValues values = new ContentValues();
values.put("calendar_id", 1);
values.put("title", str);
values.put("description", m_strDescription);
values.put("dtstart", cal.getTimeInMillis());
values.put("dtend", cal.getTimeInMillis());
values.put("hasAlarm", 1);
Uri event = cr.insert(EVENTS_URI, values);
m_calendarEvents[m_calendarEventCount] = event;
m_calendarEventCount = m_calendarEventCount + 1;
values = new ContentValues();
values.put("event_id", Long.parseLong(event.getLastPathSegment()));
values.put("method", 1);
values.put("minutes", 10);
cr.insert(REMINDERS_URI, values);
}
Run Code Online (Sandbox Code Playgroud)
}
SDKVersion 14的类
public class CycleManagerSDK14 extends CalendarAPI
{
public void setAlertOnDevice(Context c)
{
long startMillis = 0;
long endMillis = 0;
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 2, 2, 7, 0);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 2, 2, 7, 0);
endMillis = endTime.getTimeInMillis();
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.TITLE, "Walk The Dog");
values.put(CalendarContract.Events.DESCRIPTION, "My dog is bored, so we're going on a really long walk!");
values.put(CalendarContract.Events.CALENDAR_ID, 1);
values.put(CalendarContract.Events.EVENT_TIMEZONE, "eventTimezone");
cr.insert(CalendarContract.Events.CONTENT_URI, values);
}
Run Code Online (Sandbox Code Playgroud)
}
谢谢.
Vin*_*ay 3
据我了解,你有两个问题......
我的建议是创建一个抽象类并定义单独的实现。
例如
String apiClass;
if (Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.DONUT) {
apiClass = "com.example.calendar.version8plus";
} else {
apiClass = "com.example.calendar.version14plus";
}
try {
Class<? extends CalendarAPI> realClass = Class.forName(apiClass).asSubclass(CalendarAPI.class);
api = realClass.newInstance();
} catch (Exception e) {
throw new IllegalStateException(e);
}
Run Code Online (Sandbox Code Playgroud)
这样,您就可以根据 api 创建两个不同的实现...
在根据您的 API 级别进行编译时,请排除其他文件的编译,为此您需要更改 Manifest 中的 API 级别。
| 归档时间: |
|
| 查看次数: |
2646 次 |
| 最近记录: |