使用intent在月视图中显示日历

时间:2013-05-07 15:26:51

标签: android android-intent calendar

我正在开发一个小部件,其中包括使用intent打开常规的android日历,用于某些用户操作。我目前正在研究ICS,所以不太关心旧版本的API。我可以使用以下代码打开日视图:

Intent intent2 = new Intent();
intent2.setComponent(new ComponentName("com.android.calendar", "com.android.calendar.AllInOneActivity"));
intent2.setAction("android.intent.action.MAIN");
intent2.addCategory("android.intent.category.LAUNCHER");
intent2.setFlags(0x10200000);
intent2.putExtra("beginTime", dateStartMillis);
intent2.putExtra("VIEW", "DAY");
context.startActivit(intent2);

但是我似乎找不到在月视图中打开它的方法。根据{{​​3}}对于AllInOneActivity,在其onCreate方法中,它调用Utils.getViewTypeFromIntentAndSharedPref(this);来确定要显示的视图。这是方法:

 public static int getViewTypeFromIntentAndSharedPref(Activity activity) {
     Intent intent = activity.getIntent();
     Bundle extras = intent.getExtras();
     SharedPreferences prefs = GeneralPreferences.getSharedPreferences(activity);

     if (TextUtils.equals(intent.getAction(), Intent.ACTION_EDIT)) {
         return ViewType.EDIT;
     }
     if (extras != null) {
         if (extras.getBoolean(INTENT_KEY_DETAIL_VIEW, false)) {
             // This is the "detail" view which is either agenda or day view
             return prefs.getInt(GeneralPreferences.KEY_DETAILED_VIEW,
                     GeneralPreferences.DEFAULT_DETAILED_VIEW);
         } else if (INTENT_VALUE_VIEW_TYPE_DAY.equals(extras.getString(INTENT_KEY_VIEW_TYPE))) {
             // Not sure who uses this. This logic came from LaunchActivity
             return ViewType.DAY;
         }
     }

     // Default to the last view
     return prefs.getInt(
             GeneralPreferences.KEY_START_VIEW, GeneralPreferences.DEFAULT_START_VIEW);
 }

我没有在此方法(或其他任何地方)中看到将视图设置为MonthView的方法。我可以使用某种技巧,还是应该接受这是不可能的?

1 个答案:

答案 0 :(得分:0)

从这里: Android Developer Calendar Provider Docs

日历提供程序提供了两种使用VIEW Intent的方法:

将日历打开到特定日期。 查看活动。 以下是一个示例,说明如何将日历打开到特定日期:

// A date-time specified in milliseconds since the epoch.
long startMillis;
...
Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, startMillis);
Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(builder.build());
startActivity(intent);

以下示例显示如何打开要查看的事件:

long eventID = 208;
...
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW)
   .setData(uri);
startActivity(intent);

这也意味着,没有官方的方法来确定显示哪个视图。您的代码仅适用于ICS中的特定日历应用,并且很可能不适用于大多数其他应用。