Запуск внешнего приложения из моего приложения

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

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 это приложение в код. Существует ли способ получить намерения какого-либо приложения, которое выбирает пользователь так, чтобы они могли быть запущены?

5
задан Cristian 2 February 2011 в 19:53
поделиться

4 ответа

Вам нужно передать дополнительную информацию, чтобы сообщить 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 в ваш манифест.

.
7
ответ дан 14 December 2019 в 04:39
поделиться

Вам необходимо передать правильные аргументы запускаемым приложениям. Многие приложения ожидают, что URI данных и/или некоторые дополнительные параметры будут действительными.

.
0
ответ дан 14 December 2019 в 04:39
поделиться

Пожалуйста, попробуйте следующий код:

Намерение намерения = новое намерение(Contacts.Intents.SHOW_OR_CREATE_CONTACT);

this.startActivity(intent);

(извините, если что-то не так в синтаксисе, у меня нет android на этом компьютере)

И удалите из манифеста действие, в котором нет необходимости. Метод действия используется для чего-то другого. Для получения более подробной информации, пожалуйста, посмотрите на сайте android: http://developer.android.com/reference/android/content/Intent.html

Daniel

0
ответ дан 14 December 2019 в 04:39
поделиться

Я использую этот код для этой цели:

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");

Первое запускает музыкальное приложение по умолчанию, второе - контакты, а третий - номеронабиратель. Надеюсь это поможет.

1
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: