2012-03-17 214 views
1

我正在開發一個使用程序包名稱來啓動第三方應用程序的應用程序。我做了一些調查,發現所有的應用程序都可以從啓動器的意圖開始。有沒有人知道如何通過點擊一個按鈕來做到這一點。打開第三方應用程序

+0

重複http://stackoverflow.com/questions/3422758/start-application-knowing-package-name – Calvin 2012-03-17 18:31:30

+0

這不是重複。我問如何開始它,這個問題是如何找到包名。我已經知道如何找到包名。 – Magakahn 2012-03-17 18:34:07

回答

6

你不能真正 '啓動應用程序'。你可以嘗試從第三方應用程序的啓動意圖,如果你知道包名稱:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.thirdparty.package"); 
startActivity(intent); 
+1

應該將標誌設置爲「setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)」以重新打開已打開的應用程序。 – JacksOnF1re 2016-02-24 13:56:35

2

只是把它放在一個View.OnClickListener:

myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = getPackageManager().getLaunchIntentForPackage(theOtherActivityPackage); 
     startActivity(intent); 
    } 
}); 
4

對於上述接受的答案,如果你的模擬器沒有安裝第三方應用程序,你應該優雅地處理它也。 這裏是一個相同的完整代碼:

public void openThirdPartyApp() { 

     Intent intent = new Intent("com.thirdparty.package"); 
      intent.setPackage("com.thirdparty.package"); 

      try { 
       ((Activity) context).startActivityForResult(intent, REQUEST_CODE); 
      } catch (ActivityNotFoundException e) { 
       downloadIt(); 
      } 
     } 

    private void downloadIt() { 

    Uri uri = Uri.parse("market://search?q=pname:" + "com.thirdparty.package"); 
    Intent intent = new Intent(Intent.ACTION_VIEW, uri); 

       try { 
        context.startActivity(intent); 
       } catch (ActivityNotFoundException e) { 
    //creates a small window to notify there is no app available 
       } 

      } 
     } 

    } 
+0

Good answear,但這不適用於我正在做的事情。我正在使用一個包管理器來獲取包名,然後啓動它。但是這可能會在以後的項目中有用。謝謝你的回答! – Magakahn 2012-05-13 10:46:16

+0

這不起作用...在意圖初始化代碼中:Intent intent = new Intent(「com.thirdparty.package」);應該有一個像「android.intent.action.MAIN」這樣的動作沒有? – syonip 2015-12-16 12:05:15

+0

@syonip,你爲什麼要使用「android.intent.action.MAIN」? – YuDroid 2015-12-16 12:25:15

相關問題