安卓系统已安装软件的判断及通过程序安装
- - 移动开发 - ITeye博客 uri是指AndroidManifest.xml文件中的package,是安卓应用的标识符. 基本思路:apk放到assets目录下,安装时先写到sd,再调用intent安装. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.
1. 查看系统是否已经安装某个应用
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean appInstalled;
try {
pm.getPackageInfo(uri, 0);
appInstalled = true;
}
catch (PackageManager.NameNotFoundException e) {
appInstalled = false;
}
return appInstalled;
}
uri是指AndroidManifest.xml文件中的package,是安卓应用的标识符。
2. 判断安装的版本号
private int getAPKVersion(String uri) {
Integer version = -1;
PackageManager packageManager=getPackageManager();
try {
//0 means all the flags are turned off
PackageInfo Info=packageManager.getPackageInfo(uri, 0);
//like 5
version = Info.versionCode;
//like 1.0.5
versionName = Info.versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.e("error", e.getMessage());
}
return version;
}
3. 安装
基本思路:apk放到assets目录下,安装时先写到sd,再调用intent安装
private void installScannerPlugin() {
AssetManager assetManager = getAssets();
InputStream in;
OutputStream out;
try {
in = assetManager.open("BarcodeScanner.apk");
out = new FileOutputStream(Environment.getExternalStorageDirectory()
+ File.separator + "BarcodeScanner.apk");
byte[] buffer = new byte[1024];
int len;
while((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.flush();
out.close();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory()
+ File.separator + "BarcodeScanner.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
} catch(Exception e) {
e.printStackTrace();
}
}
需要权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />