2015-03-13 172 views
0

我有一個問題,我看到堆棧溢出的幾個答案,但無濟於事。我試圖做的是這樣的:從市場安裝APK從應用程序內提示安裝

我正在做一個應用程序,檢查應用程序是否先安裝。例如,com.appA.android。

如果未安裝appA,它會提示用戶提示安裝,然後再繼續安裝應用程序。我沒有試圖安裝未經用戶許可的APK,但獲得他們的許可。 appA在商店中,但我不希望我的用戶被拉離應用程序。目前,我這樣做的方式是這樣的:

Intent promptInstall = new Intent(Intent.ACTION_VIEW) 
         .setDataAndType(Uri.parse("file:///path/to/apk"), 
       "application/vnd.android.package-archive"); 
       startActivity(promptInstall); 

任何方式,我可以用一個市場環節做到這一點?

感謝您的幫助!

+0

不,你不能從Play下載的APK您自己存儲,您必須通過商店的用戶界面,無論是在設備上的應用程序或Web界面。 – 2015-03-13 14:41:03

回答

0

嘗試類似這樣的操作,即可打開特定應用的Google Play詳情頁面。 (假設這是你想要做什麼)

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("market://details?id=com.example.android")); 
startActivity(intent); 
+0

感謝您的回覆。然而,即時通訊試圖讓我的用戶進入應用程序,並與包管理器「安裝/市場/取消」提示迎接而不是被拉走。 – DirectXgameR 2015-03-13 14:38:09

+0

AFAIK,你不能直接從市場上在後檯安裝應用程序,而不顯示市場用戶界面。您可以嘗試以編程方式從市場上下載APK,並將其安裝在後臺。 – JonasCz 2015-03-13 14:41:17

+0

我會完全確定將文件首先下載到存儲,而不是提示安裝。什麼是最好的方法來做到這一點?謝謝! – DirectXgameR 2015-03-13 14:42:55

1

因爲你不能沒有安裝對話框或背景中安裝APK安全原因。您可以使用root和Packagemanager在後檯安裝APK。

有幾次嘗試偵聽應用程序的安裝,因此您可以重新啓動您的活動。一個是註冊一個BroadcastReceiver,它監聽應用程序的安裝。

<receiver android:name=".PackageReceiver"> 
<intent-filter> 
    <action android:name="android.intent.action.PACKAGE_ADDED" /> 
    <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="package" /> 
</intent-filter> 

這個類,然後安裝一個新包時被調用:

public class PackageReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
// handle install event here 
} 
} 

第二次嘗試是有一個計時器,試圖找到該應用程序的安裝所有n秒。從另一個問題示例:

public class Example extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //Put the package name here... 
     boolean installed = appInstalledOrNot("com.Ch.Example.pack"); 
     if(installed) { 
      //This intent will help you to launch if the package is already installed 
      Intent LaunchIntent = getPackageManager() 
       .getLaunchIntentForPackage("com.Ch.Example.pack"); 
      startActivity(LaunchIntent); 

      System.out.println("App already installed on your phone");   
     } 
     else { 
      System.out.println("App is not installed on your phone"); 
     } 
    } 

    private boolean appInstalledOrNot(String uri) { 
     PackageManager pm = getPackageManager(); 
     boolean app_installed = false; 
     try { 
      pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); 
      app_installed = true; 
     } 
     catch (PackageManager.NameNotFoundException e) { 
      app_installed = false; 
     } 
     return app_installed ; 
    } 
} 

最後但並非最不重要的:如果你有APK和根,你可以使用shell命令來安裝它:

pm install APKFile.apk 
+0

請更仔細地重新閱讀該問題,因爲您的帖子沒有解決所問的實際問題。 – 2015-03-13 14:39:40

+0

當然,它的確如此。因爲它會讓用戶留在當前活動中,因爲當前活動可以偵聽安裝並恢復它。 – 2015-03-13 14:40:16

+0

不,它沒有,因爲你忽略了**你無法從遊戲商店獲得apk文件來與**做到這一點。那麼,如果可以的話,不是做什麼的方法,而是問題的核心。 – 2015-03-13 14:41:52