2010-10-01 49 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。