Android系统为我们提供了很多服务管理的类,包括ActivityManager、PowerManager(电源管理)、AudioManager(音频管理)
等。除此之外,还提供了一个PackageManger管理类,它的主要职责是管理应用程序包。 通过它,我们就可以获取应用程序信息。
PackageInfo类
说明:手动获取AndroidManifest.xml文件的信息 。
常用字段:
public String packageName 包名
public ActivityInfo[] activities 所有<activity>节点信息
public ApplicationInfo applicationInfo <application>节点信息,只有一个
public ActivityInfo[] receivers 所有<receiver>节点信息,多个
public ServiceInfo[] services 所有<service>节点信息 ,多个
PackageManger 类
说明: 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得。
常用方法:
public abstract PackageManager getPackageManager()
功能:获得一个PackageManger对象
public abstrac tDrawable getApplicationIcon(StringpackageName)
参数: packageName 包名
功能:返回给定包名的图标,否则返回null
public abstract ApplicationInfo getApplicationInfo(String packageName, int flags)
参数:packagename 包名
flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可
功能:返回该ApplicationInfo对象
public abstract List<ApplicationInfo> getInstalledApplications(int flags)
参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo
的flags过滤,得到我们需要的。
功能:返回给定条件的所有PackageInfo
public abstract List<PackageInfo> getInstalledPackages(int flags)
参数如上
功能:返回给定条件的所有PackageInfo
DEMO:
PackageManager pm;
PackageInfo pi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pm = getPackageManager();
try {
pi = pm.getPackageInfo(getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
findNewVersion(pi.versionCode);
}
private void findNewVersion(int versionCode) {
OkHttpParam param = new OkHttpParam();
param.add("versionSeq",versionCode);
_PostEntry(Urls.findNewVersion, param, Urls.ActionId.findNewVersion, false);
}
FindNewVersionBean bean;
@Override
protected void onNetSuccess(int actionId, ResponseEntry result) {
// TODO Auto-generated method stub
super.onNetSuccess(actionId, result);
switch (actionId) {
case Urls.ActionId.findNewVersion:
if (result.isSuccess()) {
if (null != result.getData()
&& !TextUtils.isEmpty(result.getData().toString())) {
bean = FJson.getObject(result.getData().toString(),FindNewVersionBean.class);
if (bean.getIsNewVersion().equals("2")){
AlertDialog dialog = new AlertDialog(this);
dialog.builder();
dialog.setTitle("有新版本更新");
dialog.setMsg("当前有新版本,点击去下载");
dialog.setPositiveButton("下载", new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(bean.getDownlandUrl());
intent.setData(content_url);
startActivity(intent);
}
});
dialog.setNegativeButton("取消", new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
dialog.show();
}else if (bean.getIsNewVersion().equals("1")){
//showTips("当前已是最新版本", null);
}
}}
break;
default:
break;
}
}
在本地获取当前应用的版本号,作为参数请求服务器,服务端会把存好的版本应用的版本号进行对比,如果本地的低于服务端的,服务端返回一个值,本地拿到值后进行判断,提示用户进行更新。其它的将不做任何操作。