代码直接放方法:
/**
* 打开文件
* 兼容7.0
*
* @param context activity
* @param file File
* @param contentType 文件类型如:文本(text/html)
* 当手机中没有一个app可以打开file时会抛ActivityNotFoundException
*/
public static void startActionFile(Context context, File file, String contentType) throws ActivityNotFoundException {
if (context == null) {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);//增加读写权限
intent.setDataAndType(getUriForFile(intent,context, file), contentType);
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
}
public static Uri getUriForFile(Intent intent,Context context, File file) {
if (context == null || file == null) {
throw new NullPointerException();
}
Uri uri;
if (Build.VERSION.SDK_INT >= 24) {
uri = FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.APPLICATION_ID +".fileprovider", file);
context.grantUriPermission(context.getPackageName(),uri,Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
uri = Uri.fromFile(file);
}
return uri;
}
//install apk ,自己再改改吧。根据下载到本地存放目录,可能需要copy到到SD卡。。。
public static void installApk(final String apkPath) {
String path = FileUtils.getFileDir() + File.separator;
final String sdFilePath = path + “yourgame.apk”;
Log.w(“sdFilePath:”, sdFilePath);
_activity.runOnUiThread(new Runnable() {
@Override
public void run() {
File apkFile = new File(sdFilePath);
try {
if (!apkFile.exists())
AndroidToJs.copyAPK2SD(apkPath, sdFilePath);
else {
String srcApkMd5 = MD5.createMd5(apkPath);
Log.i(“md5”, “srcApkMd5=” + srcApkMd5);
if (!MD5.checkMd5(srcApkMd5, sdFilePath)) {
AndroidToJs.copyAPK2SD(apkPath, sdFilePath);
} else {
Log.i(“md5”, “md5对比一致”);
}
}
FileUtils.startActionFile(_activity, apkFile, “application/vnd.android.package-archive”);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}