android:来自市场活动的回应

时间:2010-10-01 11:39:16

标签: android android-activity broadcastreceiver google-play

我正在尝试制作一个应用程序,打开所选应用程序的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);

但我总是在onActivityResult.StackTrace中得到结果代码0:

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的附加内容获取packagename应该是什么关键

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
    }

}

2 个答案:

答案 0 :(得分:6)

Android电子市场未设置为支持startActivityForResult()。另外,请记住下载和安装是异步发生的(即,用户单击“安装”,下载在后台进行,并通过Notification完成安装。)

答案 1 :(得分: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。