您的位置:首页 > 移动开发

app的升级安装,解决6.0,7.0问题

2017-10-13 15:28 447 查看
https://gitee.com/code_q/MyFileDown  下载地址

做升级的时候要注意6.0 和 7.0 的权限问题

6.0的动态权限,内存的写入权限要动态获取

7.0 额uri的安全问题,只能通过provide获取

下载是通过OkhttpUtils ,非常方便
compile 'com.zhy:okhttputils:2.0.0'  


/*
* 需要判断6.0,和7.0权限判断
* */
public class MainActivity extends AppCompatActivity {

private Button tv ;
private ProgressDialog pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv= (Button) findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
} else {
downLoadApk("http://static.daozijinfu.com/Uploads/appdown/daozijinfu_2.4.4.apk");
}

}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
downLoadApk("http://static.daozijinfu.com/Uploads/appdown/daozijinfu_2.4.4.apk");
} else {
Toast.makeText(MainActivity.this,"权限被拒绝将无法下载",Toast.LENGTH_SHORT).show();
}
}
}
/**
* @描述 下载更新app
*/
private void downLoadApk(String url) {
pd = new ProgressDialog(MainActivity.this);
pd.setCancelable(false);// 必须一直下载完,不可取消
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("正在下载安装包,请稍后……");
pd.setTitle("版本升级");
pd.show();
/*okttp下载*/
OkHttpUtils.get()
.url(url)
.build()
.execute(new FileCallBack(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(), "daozi.apk") {
@Override
public void inProgress(float progress) {
Log.d("======inProgress","progress");

pd.setProgress((int) (100 * progress));
}

@Override
public void onError(Request request, Exception e) {
Log.d("======onError","下载失败");
pd.dismiss();
Toast.makeText(MainActivity.this,"下载失败",Toast.LENGTH_SHORT).show();
}

@Override
public void onResponse(File response) {
pd.dismiss();

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 以新压入栈

if(Build.VERSION.SDK_INT>=24) { //判读版本是否在7.0以上
Uri apkUri = FileProvider.getUriForFile(MainActivity.this, getPackageName() + ".provider", response);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
}else{
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(response.getAbsoluteFile()),
"application/vnd.android.package-archive");

}

startActivity(intent);
}
});

}

}

mainfest.xml文件 ,添加provide

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.com.myfile">

<uses-permission android:name="android.permission.INTERNET"/>
<application

android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"

a625
android:theme="@style/AppTheme">

<activity android:name=".MainActivity">

<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
/>
</provider>

</application>

</manifest>

file_paths。xml  文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="." name="external_storage_root" />
</paths>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐