Saya tahu cara memperbarui program saya sendiri, dan saya tahu cara membuka program menggunakan Uri yang telah ditentukan (untuk sms atau email misalnya)
Saya perlu tahu bagaimana cara membuat Intent untuk membuka MyTracks atau aplikasi lain yang saya tidak tahu maksud apa yang mereka dengarkan.
Saya mendapatkan info ini dari DDMS, tetapi saya belum berhasil mengubahnya menjadi Intent yang dapat saya gunakan. Ini diambil dari saat membuka MyTracks secara manual.
Terima kasih atas bantuan Anda
05-06 11:22:24.945: INFO/ActivityManager(76): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks bnds=[243,338][317,417] }
05-06 11:22:25.005: INFO/ActivityManager(76): Start proc com.google.android.maps.mytracks for activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: pid=1176 uid=10063 gids={3003, 1015}
05-06 11:22:26.995: INFO/ActivityManager(76): Displayed activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: 1996 ms (total 1996 ms)
sumber
onCreate
=>Bundle extras = getIntent().getExtras()
=>if(extras != null) { extras.getString("blah") }
dllgetPackageManager().getLaunchIntentForPackage()
sudah melakukan semua itu untuk Anda github.com/android/platform_frameworks_base/blob/master/core/…Saya memiliki pekerjaan seperti ini,
/** Open another app. * @param context current Context, like Activity, App, or Service * @param packageName the full package name of the app to open * @return true if likely successful, false if unsuccessful */ public static boolean openApp(Context context, String packageName) { PackageManager manager = context.getPackageManager(); try { Intent i = manager.getLaunchIntentForPackage(packageName); if (i == null) { return false; //throw new ActivityNotFoundException(); } i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); return true; } catch (ActivityNotFoundException e) { return false; } }
Contoh penggunaan:
openApp(this, "com.google.android.maps.mytracks");
Semoga bisa membantu seseorang.
sumber
getLaunchIntentForPackage
panggilan tersebut.getLaunchIntentForPackage()
sudah menambahkan kategori, lihat sumber: github.com/android/platform_frameworks_base/blob/master/core/…Context
objek di mana / bagaimana cara mendapatkannya / membuatnya? Dan paket apa yang akan diimpor. Baru di Java untuk pengembangan Android.Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(ComponentName.unflattenFromString("com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks")); intent.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(intent);
EDIT:
seperti yang disarankan dalam komentar, tambahkan satu baris sebelumnya
startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sumber
Jika Anda sudah memiliki nama paket yang ingin Anda aktifkan, Anda dapat menggunakan kode berikut yang sedikit lebih umum:
Saya menemukan bahwa ini bekerja lebih baik untuk kasus-kasus di mana aktivitas utama tidak ditemukan oleh metode reguler untuk memulai aktivitas MAIN.
sumber
Ini adalah kode solusi saya berdasarkan solusi MasterGaurav:
private void launchComponent(String packageName, String name){ Intent launch_intent = new Intent("android.intent.action.MAIN"); launch_intent.addCategory("android.intent.category.LAUNCHER"); launch_intent.setComponent(new ComponentName(packageName, name)); launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(launch_intent); } public void startApplication(String application_name){ try{ Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveinfo_list = activity.getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info:resolveinfo_list){ if(info.activityInfo.packageName.equalsIgnoreCase(application_name)){ launchComponent(info.activityInfo.packageName, info.activityInfo.name); break; } } } catch (ActivityNotFoundException e) { Toast.makeText(activity.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show(); } }
sumber
Menggunakan solusi dari inversus, saya memperluas potongan dengan fungsi, yang akan dipanggil ketika aplikasi yang diinginkan tidak diinstal saat ini. Jadi itu bekerja seperti: Jalankan aplikasi dengan nama paket. Jika tidak ditemukan, buka pasar Android - Google play untuk paket ini .
public void startApplication(String packageName) { try { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info : resolveInfoList) if(info.activityInfo.packageName.equalsIgnoreCase(packageName)) { launchComponent(info.activityInfo.packageName, info.activityInfo.name); return; } // No match, so application is not installed showInMarket(packageName); } catch (Exception e) { showInMarket(packageName); } } private void launchComponent(String packageName, String name) { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.setComponent(new ComponentName(packageName, name)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } private void showInMarket(String packageName) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
Dan itu digunakan seperti ini:
startApplication("org.teepee.bazant");
sumber
Gunakan ini :
PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("com.package.name"); startActivity(intent);
sumber
Buka aplikasi jika ada, atau buka aplikasi Play Store untuk menginstalnya:
private void open() { openApplication(getActivity(), "com.app.package.here"); } public void openApplication(Context context, String packageN) { Intent i = context.getPackageManager().getLaunchIntentForPackage(packageN); if (i != null) { i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); } else { try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN))); } catch (android.content.ActivityNotFoundException anfe) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN))); } } }
sumber
Memulai aktivitas aplikasi lain dari Aktivitas aplikasi saya. Ini bekerja dengan baik untuk saya.
Kode di bawah ini akan berfungsi jika aplikasi lain sudah diinstal di ponsel Anda, jika tidak, tidak mungkin untuk mengalihkan dari satu aplikasi ke aplikasi lain. Jadi pastikan aplikasi Anda diluncurkan atau tidak
Intent intent = new Intent(); intent.setClassName("com.xyz.myapplication", "com.xyz.myapplication.SplashScreenActivity"); startActivity(intent);
sumber
// Ini berfungsi di Android Lollipop 5.0.2
public static boolean launchApp(Context context, String packageName) { final PackageManager manager = context.getPackageManager(); final Intent appLauncherIntent = new Intent(Intent.ACTION_MAIN); appLauncherIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> resolveInfos = manager.queryIntentActivities(appLauncherIntent, 0); if ((null != resolveInfos) && (!resolveInfos.isEmpty())) { for (ResolveInfo rInfo : resolveInfos) { String className = rInfo.activityInfo.name.trim(); String targetPackageName = rInfo.activityInfo.packageName.trim(); Log.d("AppsLauncher", "Class Name = " + className + " Target Package Name = " + targetPackageName + " Package Name = " + packageName); if (packageName.trim().equals(targetPackageName)) { Intent intent = new Intent(); intent.setClassName(targetPackageName, className); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); Log.d("AppsLauncher", "Launching Package '" + packageName + "' with Activity '" + className + "'"); return true; } } } return false; }
sumber
Karena aplikasi tidak diizinkan untuk mengubah banyak pengaturan telepon, Anda dapat membuka aktivitas pengaturan seperti aplikasi lain.
Lihatlah keluaran LogCat Anda setelah Anda benar-benar mengubah pengaturan secara manual:
INFO/ActivityManager(1306): Starting activity: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.DevelopmentSettings } from pid 1924
Kemudian gunakan ini untuk menampilkan halaman pengaturan dari aplikasi Anda:
String SettingsPage = "com.android.settings/.DevelopmentSettings"; try { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(ComponentName.unflattenFromString(SettingsPage)); intent.addCategory(Intent.CATEGORY_LAUNCHER ); startActivity(intent); } catch (ActivityNotFoundException e) { log it }
sumber
Untuk API level 3+, tidak lebih dari satu baris kode:
Intent intent = context.getPackageManager().getLaunchIntentForPackage("name.of.package");
Kembalikan Intent peluncuran CATEGORY_INFO (aplikasi tanpa aktivitas peluncur, wallpaper misalnya, sering menggunakan ini untuk memberikan beberapa informasi tentang aplikasi) dan, jika tidak menemukannya, mengembalikan CATEGORY_LAUNCH paket, jika ada.
sumber
Jika Anda mencoba memulai SERVICE daripada aktivitas, ini berhasil untuk saya:
Intent intent = new Intent(); intent.setClassName("com.example.otherapplication", "com.example.otherapplication.ServiceName"); context.startService(intent);
Jika Anda menggunakan metode intent.setComponent (...) seperti yang disebutkan dalam jawaban lain, Anda mungkin mendapatkan peringatan "Maksud implisit dengan startService tidak aman".
sumber
Alternatifnya, Anda juga bisa membuka maksud dari aplikasi Anda di aplikasi lain dengan:
Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
di mana
uri
tautan dalam ke aplikasi lainsumber
Gunakan berikut ini:
String packagename = "com.example.app"; startActivity(getPackageManager().getLaunchIntentForPackage(packagename));
sumber
Luncurkan aplikasi dari aplikasi lain di Android
Intent launchIntent = getActivity.getPackageManager().getLaunchIntentForPackage("com.ionicframework.uengage"); startActivity(launchIntent);
sumber
Jika Anda ingin membuka aplikasi lain dan tidak terpasang, Anda dapat mengirimkannya ke Google App Store untuk diunduh
Pertama buat metode openOtherApp misalnya
public static boolean openOtherApp(Context context, String packageName) { PackageManager manager = context.getPackageManager(); try { Intent intent = manager.getLaunchIntentForPackage(packageName); if (intent == null) { //the app is not installed 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 (ActivityNotFoundException e) { //throw new ActivityNotFoundException(); return false; } } intent.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(intent); return true; } catch (ActivityNotFoundException e) { return false; } }
2.- Penggunaan
openOtherApp(getApplicationContext(), "com.packageappname");
sumber
Coba kode ini, Semoga ini bisa membantu Anda. Jika paket ini tersedia maka ini akan membuka aplikasi atau membuka play store untuk mengunduh
String packageN = "aman4india.com.pincodedirectory"; Intent i = getPackageManager().getLaunchIntentForPackage(packageN); if (i != null) { i.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(i); } else { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN))); } catch (android.content.ActivityNotFoundException anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN))); } }
sumber
Anda dapat menggunakan perintah ini untuk menemukan nama paket yang diinstal di perangkat:
adb shell pm list packages -3 -f
Referensi: http://www.aftvnews.com/how-to-determine-the-package-name-of-an-android-app/
sumber
Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("package_name","package_name.class_name")); intent.putExtra("grace", "Hi"); startActivity(intent);
sumber