Намерение установить приложение из галереи приложений или игрового магазина
Я хочу установить сопутствующее приложение из галереи приложений или из магазина игр, независимо от того, доступно ли оно на устройствах Huawei или других производителей.
Сегодня мой рабочий код, открывающий игровой магазин:
val appId = "com.my.app.i.want.to.install"
val installAppMarketIntent = Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appId))
val installAppUrlIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id="+appId))
try {
activity.startActivity(installAppMarketIntent)
}catch (anfe: android.content.ActivityNotFoundException){
activity.startActivity(installAppUrlIntent)
}finally {
activity!!.finish()
}
Стоит ли добавлять проверку для устройств huawei? или это намерение будет работать на устройствах Huawei с AppGallery?
2 ответа
Да, вы должны добавить проверку для устройств Huawei.
Но ("market://details?id=" + appId)
намерение предназначено для Google Play.
Huawei AppGallery должна быть:
“appmarket://details?id=”+ pkgName
(pkgName - это имя пакета приложения)
или
“market://com.huawei.appmarket.applink?appId=” + appid
Для Котлина
val uri = Uri.parse("market://details?id=" + getPackageName())
val goToMarket = Intent(Intent.ACTION_VIEW, uri)
goToMarket.addFlags(
Intent.FLAG_ACTIVITY_NO_HISTORY or
Intent.FLAG_ACTIVITY_NEW_DOCUMENT or
Intent.FLAG_ACTIVITY_MULTIPLE_TASK
)
try {
startActivity(goToMarket)
} catch (e: ActivityNotFoundException) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())
)
)
}
Для Java
public void openPlayStore(Context context) {
// you can also use BuildConfig.APPLICATION_ID
String appId = context.getPackageName();
Intent playIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appId));
final List<ResolveInfo> otherApps = context.getPackageManager().queryIntentActivities(playIntent, 0);
for (ResolveInfo otherApp : otherApps) {
// look for Google Play application
if (otherApp.activityInfo.applicationInfo.packageName
.equals("com.android.vending")) {
ActivityInfo otherAppActivity = otherApp.activityInfo;
ComponentName componentName = new ComponentName(
otherAppActivity.applicationInfo.packageName,
otherAppActivity.name
);
playIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
playIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
playIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
playIntent.setComponent(componentName);
context.startActivity(playIntent);
}
}
}