欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android应用中去android市场去评分的功能实现

程序员文章站 2022-04-28 13:20:40
一般的app可能会有这中功能,在应用中去android商店评分来提高排名,前段时间也把我的博客园上传到商店,这里不得不吐槽一些android商店的开放平台。 酷派,vivo,oppo,联想不支持个人...

一般的app可能会有这中功能,在应用中去android商店评分来提高排名,前段时间也把我的博客园上传到商店,这里不得不吐槽一些android商店的开放平台。
酷派,vivo,oppo,联想不支持个人开发者…….

有得还要软件著作证书,一个个人开发者,搞个应用练练手,哪有没精力和财力去搞这些玩意。有的比较人性化仅仅提交免责函或者开发者权力声明就可以。

三星的开放平台真是太烂了,去看看那个网页就认识什么叫差距了,用户体验是最差的。

有的不允许同名(魅族),有的允许(华为,应用宝,小米,阿里)。

言归正传,进入主题,看看如何在android应用中去android市场去评分

第一种简单的方式

实现在android程序中跳转到应用商店评分,代码比较简单,只需要通过隐式意图方式去调用应用商店app详情页就可以。

                try
                {
                    android.net.uri uri = android.net.uri.parse("market://details?id=" + packagename);
                    intent intent = new intent(new intent(intent.actionview, uri));
                    intent.addflags(activityflags.newtask);
                    startactivity(intent);
                }
                catch (exception ex)
                {
                    system.diagnostics.debug.write(ex.tostring());
                    alertutil.toastshort(this,"您的手机还没有安装任何安装安装应用市场");
                }

其他的一些相关uri:
market://search?q=pname:包名 (通过packagename名搜索app列表)
market://search?q=pub:开发者名称(通过开发者名称搜索app列表)
market://search?q=关键词(通过关键词搜索app列表)
这些方式将会显示搜索的标题
当然你也可以使用跳转网址的方式

      android.net.uri uri = android.net.uri.parse(app的网址);
                    intent intent = new intent(new intent(intent.actionview, uri));
                    startactivity(intent);

这种方式一些问题

上面的这种实现方式,虽然简单容易,但是问题很多,目前发现的有,1.当系统有多个应用商店时会弹出系统自带的选择面板。2.在我的红米note2,红米note3上,即使安装多个应用商店也不会弹出系统自带的选择面板,他会直接跳转到小米应用商店,不得不服太霸道了。
如图:这是系统自带的选择面板
android应用中去android市场去评分的功能实现
为了避免以上两种问题的出现,所以最好的一种方式还是自定义选择,点击评分弹出自定义的选择面板,由用户去点击选择。

第二种完美的方式

主要的思路就是找出当前已经安装的android商店。弹出面板让由用户自己去选择。
首先需要获取当前已经安装的包名集合

        public list getinstallappmarkets(context context)
        {
            list pkginstalllist = new list();//当前安装的应用商店
            if (context == null)
                return pkginstalllist;
            intent intent = new intent();
            intent.setaction("android.intent.action.main");
            intent.addcategory("android.intent.category.app_market");
            android.content.pm.packagemanager pm = context.packagemanager;
            ilist infos = pm.queryintentactivities(intent, 0);
            int count = infos.count;
            if (infos == null || count == 0)
                return pkginstalllist;
            for (int i = 0; i < count; i++)
            {
                string pkgname = "";
                try
                {
                    activityinfo activityinfo = infos[i].activityinfo;
                    pkgname = activityinfo.packagename;
                }
                catch (exception ex)
                {

                }
                if (!string.isnullorempty(pkgname))
                {
                    pkginstalllist.add(pkgname);
                }
            }
            return pkginstalllist;
        }

然后获取手机上已安装的app,过滤剩下应用市场的相关信息定义为appinfo类,appinfo里有这些属性:包名、应用名、icon、版本号。这些属性在后面做一个弹窗之类的功能时候用到,系统自带的弹出选择面板会出现的我们都要显示出来。弹出框这里就不写了。

        /// 
        /// 筛选出已经安装的包集合
        /// 
        ///
        ///待筛选的包名集合
        /// 已经安装的包名集合
        public list getfileterinstallmarkets(context context, list pkgs)
        {
            list applist = new list();
            if (context == null || pkgs == null || pkgs.count == 0)
                return applist;
            packagemanager pm = context.packagemanager;
            ilist installedpkgs = pm.getinstalledpackages(0);//已安装所有包
            int installedpkgscount = installedpkgs.count;
            int pkgscount = pkgs.count;
            for (int a=0;a

然后我再写一个去应用市场详情页的方法

        /// 
        /// 去应用市场app详情页
        /// 
        ///应用市场的包名
        public void appdetail(string marketpkg)
        {
            try
            {
                android.net.uri uri = android.net.uri.parse("market://detail?id="+packagename);
                intent intent = new intent(intent.actionview,uri);
                if (string.isnullorempty(marketpkg))
                    intent.setpackage(marketpkg);
                intent.addflags(activityflags.newtask);
                startactivity(intent);
            }
            catch(exception ex) {
                alertutil.toastshort(this,ex.tostring());
            }
        }
;a++)>