【问题标题】:Android + phonegap +package managerAndroid + phonegap +包管理器
【发布时间】:2013-02-04 08:20:48
【问题描述】:

我需要编写一个 cordova 插件来检索用于 Android 应用程序的应用程序名称、版本代码和版本名称。请尽快回复...在此先感谢 :)

这是我的代码....收到无效操作错误消息。

My.js

var AppInfo = function() {};
AppInfo.prototype.getVersionName = function(successCallback, failureCallback) {
    return cordova.exec(
        successCallback, 
        failureCallback, 
        'AppInfo', 
        'GetVersionName', 
        []
    );
};

AppInfo.java (插件)

package com.cordova.plugin.appInfo;
import org.json.JSONArray;
import org.json.JSONException;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import org.apache.cordova.api.CordovaPlugin;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.PluginResult;
import org.apache.cordova.api.PluginResult.Status;

public class AppInfo extends CordovaPlugin {
public final String ACTION_GET_VERSION_NAME = "GetVersionName";
Context ctx;
public PluginResult execute(String action, JSONArray args, String callbackId) {
    ctx = cordova.getContext();
    PluginResult result = new PluginResult(Status.INVALID_ACTION);
    PackageManager packageManager = this.ctx.getPackageManager();
    if(action.equals(ACTION_GET_VERSION_NAME)) {
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(
                                          this.ctx.getPackageName(), 0);
            result = new PluginResult(Status.OK, packageInfo.versionName);
        }
        catch (NameNotFoundException nnfe) {
            result = new PluginResult(Status.ERROR, nnfe.getMessage());
        }
    }
    return result;
}
}

.html

<script>
function onDeviceReady () {
    $('#send').bind('click', function () {
        alert('Hello World'); 
        window.applicationInfo = new AppInfo();
        window.applicationInfo.getVersionName( function(versionName){
           alert("versionName" + versionName);
        },
        function (errorMessage){
           alert("Error is "+errorMessage);
        }
        ); 
    });                
}
document.addEventListener("deviceready", onDeviceReady, false);
</script>

最后在plugin.xml中设置权限和插件

【问题讨论】:

    标签: javascript android cordova-2.0.0


    【解决方案1】:

    此帮助函数检索所有已安装的应用程序,包括应用程序名称、包名称、版本号和代码以及图标。 getPackages() 方法返回一个包含所有应用程序的 ArrayList

    class PInfo {
    private String appname = "";
    private String pname = "";
    private String versionName = "";
    private int versionCode = 0;
    private Drawable icon;
    private void prettyPrint() {
        Log.v(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
    }
     }
    private ArrayList<PInfo> getPackages() {
        ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */
       final int max = apps.size();
        for (int i=0; i<max; i++) {
           apps.get(i).prettyPrint();
       }
      return apps;
       }       
    
    private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
          ArrayList<PInfo> res = new ArrayList<PInfo>();        
         List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
          for(int i=0;i<packs.size();i++) {
                 PackageInfo p = packs.get(i);
                 if ((!getSysPackages) && (p.versionName == null)) {
                  continue ;
           }
        PInfo newInfo = new PInfo();
        newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
        newInfo.pname = p.packageName;
        newInfo.versionName = p.versionName;
        newInfo.versionCode = p.versionCode;
        newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
        res.add(newInfo);
    }
    return res; 
     }
    

    希望对你有帮助。

    谢谢

    【讨论】:

    • 感谢您的快速回复,如果我错了,请纠正我...您发布的代码稍后会对我有所帮助...首先我需要编写一个 phonegap 插件来获取版本名称等.
    • 我正在尝试实现相同的功能。这有什么好运气吗?请更新
    【解决方案2】:

    您可以通过扩展PhoneGap的Plugin类来为Package Manager编写插件,并在Plugin中添加包Info类并实现逻辑以获取已安装的应用程序。

    【讨论】:

    • 谢谢!!这就是 wat m 寻找...并遇到相同的问题..thnxx 回复:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2017-09-30
    相关资源
    最近更新 更多