最近在做更新的接口。发现新应用上架的时候都需要软件版权了。希望各位Android开发者注意啦。
不过之前一直没有做安卓这边7.0以及8.0的更新。表示十分的苦恼。只能说我这个小透明来献丑一番啦。
废话不多说,直接上代码。
/* 获取本地软件版本号
*/
public static int getLocalVersion(Context ctx) {
try {
PackageInfo packageInfo = ctx.getApplicationContext()
.getPackageManager()
.getPackageInfo(ctx.getPackageName(), 0);
localVersion = packageInfo.versionCode;
DebugLog.d("本软件的版本号。。" + localVersion);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return localVersion;
}
先获取当前的版本号,然后再说其他的。要不然咋地去做对比啊?
接下来要去获取后台存储的版本号啦。
获取到后,判断本地的版本号是否小于后台给的版本号,要是小于那就去走更新下载啦,要是相等的话,那就走其他的页面。
public void getUrl() {
String http = mSharedPreferences.getString("http", "") + DirectionUrl.UPDATEVERSION;
XutilsHttp.getInstance().post(http, null, new XCallBack() {//budui
@Override
public void onResponse(String result) {
DebugLog.d(result);
try {
JSONObject jsonObject = new JSONObject(result);
final String url = jsonObject.getString("downloadUrl");
int code = jsonObject.getInt("versionNumber");
if (code > localVersion) {
new QMUIDialog.MessageDialogBuilder(WelActivity.this)
.setMessage("检测到新版本,请问是否更新?")
.addAction("取消", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
toM();
dialog.dismiss();
}
})
.addAction("确定", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
upadata(url);
}
})
.create(mCurrentDialogStyle).show();
} else {
toM();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFail(String errorMsg, String whereRequest) {
}
});
}
激动人心的时刻来了。因为到了正题,哈哈先说7.0的问题。
1、在manifest注册
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="你的包名.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
2、新建一个xml的文件夹,新建一个file_paths
<paths>
<external-path
name="external_storage_root"
path="."/>
</paths>
再说一下8.0的故事啦。
在manifest加上
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
下面直接安装
public void installApk(File apkFile) {
Intent installApkIntent = new Intent();
installApkIntent.setAction(Intent.ACTION_VIEW);
installApkIntent.addCategory(Intent.CATEGORY_DEFAULT);
installApkIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
installApkIntent.setDataAndType(FileProvider.getUriForFile(getApplicationContext(), "你的包名.fileprovider", apkFile), "application/vnd.android.package-archive");
installApkIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
installApkIntent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
}
if (getPackageManager().queryIntentActivities(installApkIntent, 0).size() > 0) {
startActivity(installApkIntent);
}
}
注意“你的包名.fileprovide”这个地方跟manifest的要一致。
好了,好了。分享完毕···