1、获取本地APK版本信息

获取当前程序的版本号
public static int getVersionCode(Context mContext) {
int versionCode = 0;
try {
versionCode = mContext.getPackageManager().
getPackageInfo(mContext.getPackageName(), 0).versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versionCode;
}
获取版本号名称(对应versionName)
public static String getVerName(Context context) {
String verName = "";
try {
verName = context.getPackageManager().
getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return verName;
}
2、获取服务器APK版本信息
添加网络访问权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!--下载文件读写权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
服务器上txt文件形式
{
"code": "2.0",
"update": "http://hnzldzkj.cn/static/apks/version.txt"
}
访问服务器txt文件并解析字段代码(需在线程中调用)

private String getVersion() throws IOException, JSONException {
URL url = new URL("http://hnzldzkj.cn/static/apks/version.txt");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setReadTimeout(8 * 1000);
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String string;
string = bufferedReader.readLine();
JSONObject jsonObject = new JSONObject(string);
String strings = jsonObject.getString("code");
return strings;
}
3、比较本地APK和服务器上APK的版本号(versionCode)
if(new_apkcode> getVersionCode(getContext())){ //如果新版本的versionCode大于旧版本的
showUpdataDialog();
}else {
Toast.makeText(getActivity(),"当前为最新版本!",Toast.LENGTH_SHORT).show();
}
弹出对话框
protected void showUpdataDialog() {
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setTitle("发现新版本")
.setMessage("是否更新到最新版本?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 执行下载操作
}
})
.setNegativeButton("取消", null)
.create();
dialog.show();
}
4、下载安装APK
从服务器下载APK文件
private void downloadAPK(final String apkUrl) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(apkUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10 * 1000); //超时时间
connection.connect(); //连接
if (connection.getResponseCode() == 200) { //返回的响应码200是成功.
File file = new File("/mnt/sdcard/yang/dujinyang.apk"); //这里我是手写了。 file.createNewFile();
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); //缓存
byte[] buffer = new byte[1024 * 10];
while (true) {
int len = inputStream.read(buffer);
publishProgress(len);
if (len == -1) {
break; //读取完
}
arrayOutputStream.write(buffer, 0, len); //写入
}
arrayOutputStream.close();
inputStream.close();
byte[] data = arrayOutputStream.toByteArray();
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(data); //记得关闭输入流
fileOutputStream.close();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
安装APK文件
private void installAPK(String path) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
卸载APK文件

private void uninstallAPK(String packageURI) {
Uri packageUri = Uri.parse("package:" + packageURI);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageUri);
startActivity(uninstallIntent);
}
相关问题与解答的栏目:
Q1: 如何确保用户设备上的Android系统支持从SD卡安装APK?
A1: 确保应用的android:minSdkVersion至少为8,这样应用程序才能支持从SD卡安装APK,还需要在AndroidManifest.xml中设置android:installLocation="preferExternal"来指定应用首选安装在外部存储上。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:installLocation="preferExternal" ... >
...
</application>
</manifest>
到此,以上就是小编对于“安卓获取服务器apk文件”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。