2013-09-17 3 views
0

КодексКалендарь Намерение и Samsung Galaxy SII

Я реализовал Календаря Intent на Android Application следующим образом:

Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setData(Events.CONTENT_URI); 
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, parsedStartTime.toMillis(false)) 
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, parsedEndTime.toMillis(false)) 
intent.putExtra(Events.TITLE, eventInfo.getName()) 
intent.putExtra(Events.DESCRIPTION, eventInfo.getText()) 
intent.putExtra(Events.EVENT_LOCATION, eventInfo.getWhere()) 
intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY); 
startActivity(intent); 

Проблему

I' ve использовали ACTION_EDIT, начиная с ACTION_INSERT как на the official developer guide, похоже, создает проблемы на некоторых устройствах.

Этот код работает OK на устройствах, которые я тестировал. Среди них Motorola Defy + с Android 4.1.2, а также Samsung Galaxy SIII Mini с Android 4.1.2 от Samsung.

Но у меня есть сообщения, что на Samsung Galaxy SII с Android 4.0.4 приложение рушится. В частности с ошибкой:

android.content.ActivityNotFoundException 

К сожалению, это вся информация, у меня, так как я не имею доступ к самому телефону (это от пользователя). У меня ошибка Google Analytics.


Вопрос

Как я видел на этом post, есть какая-то проблема с Samsung и поставщиком календаря. Есть ли способ использовать Календарные намерения на этом телефоне? или мне придется использовать getContentResolver()?

Я считаю, что в этом случае мне нужно будет добавить разрешения для календаря в приложение, но пользователь не сможет выбрать календарь для сохранения события.

Любая помощь будет оценена!

ответ

0

Хорошо, поэтому я нашел проблему: у клиента не было установленного приложения Календаря для обработки намерения Календаря. Я не думал, что это возможно.

В этом случае будет добавлен тест, чтобы проверить, есть ли приложение, которое может обрабатывать намерение.

Чтобы проверить, если намерение доступно мы можем использовать:

public static boolean isAvailable(Context ctx, Intent intent) { 
     final PackageManager mgr = ctx.getPackageManager(); 
     List<ResolveInfo> list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
     return list.size() > 0; 
} 

И передать намерение в качестве аргумента этой функции.