2010-10-01 26 views
4

我正在試圖打開一個應用程序,打開所選應用程序的安卓市場頁面&讓用戶下載它。我已經使用了下面的意圖開放市場。android:市場活動的反應

Intent intent = new Intent (Intent.ACTION_VIEW); 
    intent.setData (Uri.parse ("market://details?id=" + PackageName)); 
    intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivityForResult (intent, 13); 

,但我總是resultCode爲0 onActivityResult.StackTrace說:

I/ActivityManager( 79): Starting activity: Intent { act=android.intent.action.VIEW dat=market://details?id=com.google.android.apps.unveil flg=0x10000000 cmp=com.an 
droid.vending/.AssetInfoActivity } 
W/ActivityManager( 79): Activity is launching as a new task, so cancelling activity result. 

我想要的是市場回報我一些響應該用戶下載的應用程序或剛剛取消。

編輯: @CommonsWare我想在這裏訪問額外的包,但無法弄清楚什麼應該是關鍵,從ACTION_PACKAGE_ADDED

public class ServiceReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    //Do this when the system sends the intent 
    Bundle b = intent.getExtras(); 
    String packagename = b.get(?); //cant figure what should be key to get packagename //from extras 
    } 

} 
+0

我相信你會在'onActivityResult'方法中尋找'requestCode'而不是'resultCode' – binnyb 2010-10-01 13:11:34

回答

6

Android的市場是不是設置爲支持startActivityForResult()額外獲得包名。另外,請記住,下載和安裝是異步進行的(即,用戶單擊「安裝」,下載在後臺進行,他們通過Notification完成安裝)。

+0

這是否意味着沒有其他方法可以獲取當前安裝的應用程序,而不是每次在PACKAGE_ADDED上查詢整個安裝列表? – 100rabh 2010-10-05 13:18:40

+0

@Saurabh:「ACTION_PACKAGE_ADDED」廣播中有額外的內容,可以幫助您識別添加的內容。 – CommonsWare 2010-10-05 13:43:00

+0

我跟着這個帖子獲取額外http://stackoverflow.com/questions/1990855/android-how-to-get-location-information-from-intent-bundle-extras-when-using-loc但未能獲得關鍵爲Packagename.See編輯上面的帖子。 – 100rabh 2010-10-06 08:32:22

3

@CommonsWare一流!

您的解決方案被證明有益&它也登上了我另一個非常有用的頁面http://devdaily.com/java/jwarehouse/android/core/java/com/android/internal/content/PackageMonitor.java.shtml

下面是從上面的鏈接的源代碼片斷從廣播意圖獲取當前已安裝的應用程序的軟件包名稱:

String getPackageName(Intent intent) { 
     Uri uri = intent.getData(); 
     String pkg = uri != null ? uri.getSchemeSpecificPart() : null; 
     return pkg; 
    } 

感謝Commonsware。