Yüklü bir paketi Android uygulamamdan başlatmak istiyorum. Amaçları kullanmanın mümkün olduğunu düşünüyorum, ama bunu yapmanın bir yolunu bulamadım. Bilgiyi nerede bulacağınız bir bağlantı var mı?
Yüklü bir paketi Android uygulamamdan başlatmak istiyorum. Amaçları kullanmanın mümkün olduğunu düşünüyorum, ama bunu yapmanın bir yolunu bulamadım. Bilgiyi nerede bulacağınız bir bağlantı var mı?
Yanıtlar:
Ana etkinliği bilmiyorsanız, uygulamayı başlatmak için paket adı kullanılabilir.
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
if (launchIntent != null) {
startActivity(launchIntent);//null pointer check in case package name was not found
}
CATEGORY_INFO
ve kategorisinde bir ana aktivite için bir sonraki CATEGORY_LAUNCHER
. Ne bulunursa null değerini döndürür. "
Bunun cevaplandığını biliyorum ama işte benzer bir şeyi nasıl uyguladığım:
Intent intent = getPackageManager().getLaunchIntentForPackage("com.package.name");
if (intent != null) {
// We found the activity now start the activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + "com.package.name"));
startActivity(intent);
}
Daha da iyisi, işte yöntem:
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent != null) {
// We found the activity now start the activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
}
}
Yinelenen kod kaldırıldı:
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent == null) {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + packageName));
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
Çözümü buldum. Uygulamanın bildirim dosyasında paket adını buldum: com.package.address ve başlatmak istediğim ana etkinliğin adı: MainActivity Aşağıdaki kod bu uygulamayı başlatır:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.package.address","com.package.address.MainActivity"));
startActivity(intent);
// in onCreate method
String appName = "Gmail";
String packageName = "com.google.android.gm";
openApp(context, appName, packageName);
public static void openApp(Context context, String appName, String packageName) {
if (isAppInstalled(context, packageName))
if (isAppEnabled(context, packageName))
context.startActivity(context.getPackageManager().getLaunchIntentForPackage(packageName));
else Toast.makeText(context, appName + " app is not enabled.", Toast.LENGTH_SHORT).show();
else Toast.makeText(context, appName + " app is not installed.", Toast.LENGTH_SHORT).show();
}
private static boolean isAppInstalled(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException ignored) {
}
return false;
}
private static boolean isAppEnabled(Context context, String packageName) {
boolean appStatus = false;
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packageName, 0);
if (ai != null) {
appStatus = ai.enabled;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return appStatus;
}
Birisi yararlı buluyorsa, uygulamamdan bar / QR kod tarayıcısını başlatma örneğim
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
try
{
startActivityForResult(intent, SCAN_REQUEST_CODE);
}
catch (ActivityNotFoundException e)
{
//implement prompt dialog asking user to download the package
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(this);
downloadDialog.setTitle(stringTitle);
downloadDialog.setMessage(stringMessage);
downloadDialog.setPositiveButton("yes",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialogInterface, int i)
{
Uri uri = Uri.parse("market://search?q=pname:com.google.zxing.client.android");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try
{
myActivity.this.startActivity(intent);
}
catch (ActivityNotFoundException e)
{
Dialogs.this.showAlert("ERROR", "Google Play Market not found!");
}
}
});
downloadDialog.setNegativeButton("no",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int i)
{
dialog.dismiss();
}
});
downloadDialog.show();
}
Yoruma bağlı olarak düzenleme
Bazı sürümlerde - yorumlarda belirtildiği gibi - atılan istisna farklı olabilir.
Böylece aşağıdaki çözüm biraz değiştirilir
Intent launchIntent = null;
try{
launchIntent = getPackageManager().getLaunchIntentForPackage("applicationId");
} catch (Exception ignored) {}
if(launchIntent == null){
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://play.google.com/store/apps/details?id=" + "applicationId")));
} else {
startActivity(launchIntent);
}
Orijinal Yanıt
İyi cevaplanmış olmasına rağmen, uygulama yüklü değilse işleyen oldukça basit bir uygulama var. Böyle yaparım
try{
startActivity(getPackageManager().getLaunchIntentForPackage("applicationId"));
} catch (PackageManager.NameNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://play.google.com/store/apps/details?id=" + "applicationId")));
}
"ApplicationId" ifadesini com.google.maps vb. Gibi açmak istediğiniz paketle değiştirin.
PackageManager.getLaunchIntentForPackage(...)
Paket adı tanınan değilse yöntem döndürür boş. Atmıyor PackageManager.NameNotFoundException
. Buraya bakın .
startActivity(null)
bir Android 10 emülatörü üzerinde denedim ve a a NullPointerException
değil a atar PackageManager.NameNotFoundException
.
startActivity(Intent intent)
Boş değer verildiğinde yöntemin amaçlanan davranışı Intent
nedir ve bunu size söyleten nedir? Android geliştiricilerinin belgeleri yalnızca bir ActivityNotFoundException
.
// check for the app if it exist in the phone it will lunch it otherwise, it will search for the app in google play app in the phone and to avoid any crash, if no google play app installed in the phone, it will search for the app in the google play store using the browser :
public void onLunchAnotherApp() {
final String appPackageName = getApplicationContext().getPackageName();
Intent intent = getPackageManager().getLaunchIntentForPackage(appPackageName);
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
onGoToAnotherInAppStore(intent, appPackageName);
}
}
public void onGoToAnotherInAppStore(Intent intent, String appPackageName) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + appPackageName));
startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName));
startActivity(intent);
}
}
Başka bir uygulamanın belirli bir etkinliğini açmak istiyorsanız bunu kullanabiliriz.
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try
{
startActivity(intent)
}catch(ActivityNotFoundException e){
Toast.makeText(context,"Activity Not Found",Toast.LENGTH_SHORT).show()
}
Başka bir uygulamaya ihtiyacınız varsa, Tost'u göstermek yerine bir iletişim kutusu gösterebilirsiniz. İletişim kutusunu kullanarak gerekli uygulamayı indirmek için kullanıcıyı Play-Store'a getirebilirsiniz.
com.android.settings.fuelgauge.PowerUsageSummary
Sadece bir olan etkinlik-takma ait com.android.settings.Settings$PowerUsageSummaryActivity
, ve kuruldu Android Pie çıkarıldı Bu cevap elbise Pie yapmak için düzenlemek zirvesine yüzden. Ayrıca eski sürümle de uyumlu olduğunu unutmayın, bkz.10 Kasım 2011 tarihinde AOSP taahhüdü af9252849fd94c1f2859c56a4010900ea38a607e vb
Yüklü paketin tepki verdiği verileri ve eylemi biliyorsanız, başlatmadan önce bu bilgileri niyet örneğinize eklemeniz yeterlidir.
Diğer uygulamanın AndroidManifest'ine erişiminiz varsa, gerekli tüm bilgileri orada görebilirsiniz.
Yeni etkinlik başlatma adımları aşağıdaki gibidir:
1. paket için niyet alın
2.Kullanma null olursa PlayStore'a yönlendirme
3.Kent null açık etkinlik değilse
public void launchNewActivity(Context context, String packageName) {
Intent intent = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.CUPCAKE) {
intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
}
if (intent == null) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
}
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
Kullanarak bir uygulamanın etkinliğini başlatmak mümkündür Intent.setClassName
Dokümanlara göre .
Bir örnek:
val activityName = "com.google.android.apps.muzei.MuzeiActivity" // target activity name
val packageName = "net.nurik.roman.muzei" // target package's name
val intent = Intent().setClassName(packageName, activityName)
startActivity(intent)
Geçerli uygulamanın dışında açmak için, amacı başlatmadan önce bu bayrağı ekleyin.
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
İlgili bir cevap burada
private fun openOtherApp() {
val sendIntent = packageManager.getLaunchIntentForPackage("org.mab.dhyanaqrscanner")
startActivity(sendIntent)
finishAffinity()
}