Загрузить другое приложение из текущего приложения
Привет я разрабатываю приложение для Android, где я отображаю все установленные приложения в виде списка. При нажатии на элемент списка, я пытаюсь открыть это конкретное приложение.
Это код, который я пытаюсь
mListView.setOnItemClickListener(new OnItemClickListener()
{
private Intent intent;
public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3)
{
String packName = (String) listOfapps.get(position).get("packagename");
intent = getPackageManager().getLaunchIntentForPackage(packName);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
startActivity(intent);
}
});
Это отлично работает для некоторых приложений. Но по щелчку контактов и нескольких приложений, я получаю силу близко, как
android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.android.contacts/com.android.internal.app.ResolverActivity}; Вы объявили об этой активности в вашем AndroidManifest.xml?
Не уверен, где я иду не так. Пожалуйста помоги. Спасибо
3 ответа
Возможно, что есть пакеты, которые не предоставляют модуль запуска Intent
что вы можете использовать. Чтобы предотвратить сбой вашего приложения, вы должны быть в состоянии проверить, если ваш лаунчер Intent
на самом деле будет работать так:
String packName = (String) listOfapps.get(position).get("packagename");
intent = getPackageManager().getLaunchIntentForPackage(packName);
// See how the package manager will resolve this Intent
ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY);
// Only start the activity if the package manager can resolve the Intent
if (resolveInfo != null) {
startActivity(intent);
} else {
// Tell the user he can't launch this app or whatever
}
Вам также не нужно устанавливать Intent.FLAG_ACTIVITY_NEW_TASK
или же Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
на Intent
потому что эти флаги уже должны быть установлены для вас при вызове getLaunchIntentForPackage()
,
Попробуй вот так
PackageManager pm = getPackageManager();
try
{
String packageName = "APP_PACKAGENAME";
Intent launchIntent = pm.getLaunchIntentForPackage(packageName);
startActivity(launchIntent);
}
catch (Exception e1)
{
}
Где имя пакета - это имя пакета другого приложения, которое вы хотите запустить
Для открытия контактов и некоторых внутренних приложений вам нужно назвать намерения. например для контактов. ты можешь попробовать это
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
Вы можете дать условие if для mListView.setOnItemClickListener некоторым приложениям, которые являются внутренними.
Надеюсь это поможет.!!