我想要在android代码里获得apk版本号
代码如下:try {
PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo("com.example.test", 0);
int version = info.versionCode;
}
catch (NameNotFoundException e) {
}
问题是getPackageManager()这个函数是由Context提供的.而我以上代码是纯java类TransferProtocol里面的,它不知道任何的Activity, Service或者BroadcastReceiver...
也就是说调用不到Context.getPackageManager()这个函数...我又不想因为要取得PackageManager而将纯java类TransferProtocol跟Activity, Service或者BroadcastReceiver偶合在一起...

解决方案 »

  1.   

    纯java的你就底层的jni之类的吧  这个是android上层的使用方法 ,你想跳开,就只能使用封装之前的方法了或者解析manifest等等神马的   (我没搞过  不能搞定问题别介)
      

  2.   

    没那么复杂的,直接传个context进去就可以了。
      

  3.   

    或者可以在自己的Application类里写一个方法,然后调用这个方法
    MyApp app = (MyApp) getApplication();
    app.getVersion();...
      

  4.   

    直接传递个context即可也有类似getApplicationContext()的方法
      

  5.   

    TransferProtocol.java
    TransferManager.java
    ------------------------------------------
    这2个是用来解析socket传输的协议的,
    协议的在pc端也需要相应去解析,因而在我的pc端有下面的文件
    TransferProtocol.h
    TransferProtocol.cpp
    TransferManager.h
    TransferManager.cpp
    ------------------------------------------所以我要求协议接口本身是跟平台无关的,即//////////////java file
    public class TransLine_Checkversion {
      public bool decode() {
        //这里是java平台的check version通信协议处理
        //函数处理实现的地方,充许调用具体平台相关的东西,比如说
        try {
          PackageManager pm = getPackageManager();
          PackageInfo info = pm.getPackageInfo("com.example.test", 0);
          int version = info.versionCode;
        }
        catch (NameNotFoundException e) {
        }    //但是不能因为要得到PackageManager这个东西,因将函数本身改为
        //public bool decode(Context context) {}
        //这样就将协议接口本身跟平台藕合在一起了..
        那么换到pc平台下c/c++的接口怎么写呢?
        //bool decode(Context* context) {} //c/c++没有用到Context*指针啊
        //或者
        //bool decode() {} //很明显,接口跟android平台下的不一致了啊...
      }
    }
    //
    public class TransLine_Checkversion {
      public bool decode() {
    ------------------------------------//////////////c/c++  file
    class TransLine_Checkversion {
    public:
      bool decode() {
        //这里在pc平台下处理check version通信协议....
      }
    };//TransferProtocol.java
      

  6.   

    也就是说
    TransferProtocol
    TransferManager这2套东西,实现可以调用具体平台的东西.
    但是类或者函数结构本身不能平任何平台相关..
    甚至类或者函数的参数,返回值等等.个数,类型都必须是一致的.
    //////////////java file
    public class TransLine_Checkversion {
      public bool decode() {}
      //... ...
    }//////////////c/c++ file
    class TransLine_Checkversion {
    public:
      bool decode() {}
      //... ...
    };
    2者必须一致....
    (当然private, protected的函数或变量可以不同)