Я хотел бы запустить приложение, которое пользователь выбирает из моего приложения. Однако я не уверен, как я пошел бы о выполнении этого. Я попробовал это:
Intent intent = new Intent();
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
startActivity(intent);
Но это, кажется, бросает ошибку и вызывает близко мое приложение. Я также пытался добавить:
<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/>
в файле AndroidManifest, но напрасно.
Взгляд на Logcat показывает, что это - "IOexception - никакой такой файл или каталог". Несколько вопросов являются результатом этого. Я прочитал документы Android и заметил что Контакт. Класс намерений удерживается от использования. Однако это - преемник, ContactContracts нацелен на уровень API 5, тогда как я нацелен на уровень API 3. Это могло быть проблемой? Кроме того, у меня есть hardcoded это приложение в код. Существует ли способ получить намерения какого-либо приложения, которое выбирает пользователь так, чтобы они могли быть запущены?
Вам нужно передать дополнительную информацию, чтобы сообщить Android что вы хотите показать или создать. В противном случае Android не знает, какую активность нужно начать и (предположительно в вашем случае) выбрасывает ActivityNotFoundException
.
Для контакта вы используете общий Intent.ACTION_INSERT_OR_EDIT
, а затем используете MIME-тип индивидуального контакта (Contacts. People.CONTENT_ITEM_TYPE
).
Например:
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(People.CONTENT_ITEM_TYPE);
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.PhonesColumns.TYPE_MOBILE);
Это вызовет приложение "Контакты", которое предложит вам выбрать существующий контакт для добавления номера телефона или создания нового контакта.
Вам не нужно добавлять ничего особенного в свой манифест для начала внешних действий. Только если вы будете напрямую манипулировать контактами ContentProvider
, вам нужно будет добавить соответствующие разрешения CONTACT в ваш манифест.
Вам необходимо передать правильные аргументы запускаемым приложениям. Многие приложения ожидают, что URI данных и/или некоторые дополнительные параметры будут действительными.
.Пожалуйста, попробуйте следующий код:
Намерение намерения = новое намерение(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
this.startActivity(intent);
(извините, если что-то не так в синтаксисе, у меня нет android на этом компьютере)
И удалите из манифеста действие, в котором нет необходимости. Метод действия используется для чего-то другого. Для получения более подробной информации, пожалуйста, посмотрите на сайте android: http://developer.android.com/reference/android/content/Intent.html
Daniel
Я использую этот код для этой цели:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.settings", "com.android.settings.Settings");
startActivity(intent);
Это запустит приложение "Настройки", вы также можете использовать их:
intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter");
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity");
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity");
Первое запускает музыкальное приложение по умолчанию, второе - контакты, а третий - номеронабиратель. Надеюсь это поможет.