2010-07-27 49 views
27

Tôi muốn khởi chạy ứng dụng specif. Tôi biết cách thực hiện Mục đích nhưng tôi muốn tránh menu lựa chọn nếu có nhiều ứng dụng có thể xử lý mục đích, tôi muốn chuyển trực tiếp đến một ứng dụng cụ thể. Hy vọng điều này có ý nghĩa.Làm cách nào để khởi chạy một ứng dụng cụ thể theo chương trình trong Android?

+1

thể trùng lặp của [Mở khác một ứng dụng từ ứng dụng của chúng tôi?] (http://stackoverflow.com/questions/3342655/open-another-one-application-from-our-application) – Pentium10

Trả lời

23

Bạn sử dụng tên gói/lớp trực tiếp, ví dụ để tạo ra một ý định mới để gọi chương trình Twidroid bạn muốn sử dụng như sau link text:

Intent intent = new Intent("com.twidroid.SendTweet"); 

Bạn có thể muốn đặt một thử/tìm hiểu về ActivityNotFoundException khi ứng dụng chưa được cài đặt.

+4

Nếu nó xảy ra, bạn có thể ném ngoại lệ và mở ứng dụng trên GooglePlay. ;) –

8
Intent intent = new Intent();  
intent.setClassName("package.name", "package.name.LauncherActivityName"); 
startActivityForResult(intent,REQUEST_CODE); 
3

Hoạt động bạn đang gọi sẽ không chỉ xuất hiện trong Tệp kê khai cho gói riêng của nó mà còn xuất hiện trong Tệp kê khai cho gói CALLING. - đừng quên!

44

Bạn nên sử dụng chức năng của trình quản lý gói.

Context ctx=this; // or you can replace **'this'** with your **ActivityName.this** 
try { 
Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet"); 
ctx.startActivity(i); 
} catch (NameNotFoundException e) { 
    // TODO Auto-generated catch block 
} 
+1

ctx là gì? đối tượng hoặc từ khóa? – Azahar

+2

Đó là [đối tượng ngữ cảnh Android] (http://developer.android.com/reference/android/content/Context.html), ví dụ: một Activity hoặc giá trị trả về của getApplicationContext(). – Carni

+0

ok. thank you carmi +1 – Azahar

3

tôi sử dụng:

try { 
     Intent intent = new Intent();  
     intent.setClassName("package.name", "<your_package_name>"); 
     startActivity(intent); 
    } catch (NameNotFoundException e) { 
     Log.e(TAG, e.getMessage()); 
    } 

Nhưng giống như Cami gợi ý này sẽ làm việc quá:

try { 
    Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet"); 
    ctx.startActivity(i); 
} catch (NameNotFoundException e) { 
    Log.e(TAG, e.getMessage()); 
} 
1

trong phương pháp gọi onCreate => openApp(); phương pháp

private void openApp() { 
    String packageName = "com.google.android.gm"; 
    if (isAppInstalled(activity, packageName)) 
     startActivity(getPackageManager().getLaunchIntentForPackage(packageName)); 
    else Toast.makeText(activity, "App not installed", Toast.LENGTH_SHORT).show(); 
} 

public static boolean isAppInstalled(Activity activity, String packageName) { 
    PackageManager pm = activity.getPackageManager(); 
    try { 
     pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); 
     return true; 
    } catch (PackageManager.NameNotFoundException e) { 
    } 
    return false; 
} 
+0

Cảm ơn bạn rất nhiều vì gmail! –

Các vấn đề liên quan