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 ,非常方便
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 文件
做升级的时候要注意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>
相关文章推荐
- Android Studio升级到2.3.1,小米MI无法安装apk,安装失败,闪退,即时运行 失败,Session 'app': Error Installing APKs,问题解决办法
- 安卓开发debug-app卸载不干净,导致安装、升级不成功问题的解决办法
- 安卓开发debug-app卸载不干净,导致安装、升级不成功问题的解决办法
- 解决魅族MX5卸载debug-app不干净,导致安装、升级不成功的问题
- 解决魅族MX5卸载debug-app不干净,导致安装、升级不成功的问题
- 部分电脑安装升级 ubuntu 12.04 后无法挂起问题的解决(挂起无法唤醒同样有效)
- VMware安装Fedora18,升级3.8.2内核,导致hgfs无法编译安装,无法共享文件夹的问题解决方法
- 解决安装 Internet Download Manger@V6.0.9时集成浏览器的问题
- 解决安装 Internet Download Manger@V6.0.9时集成浏览器的问题
- 免安装tomcat6.0启动方法:解决双击startup.bat一闪而过问题
- 解决app在没有上传app store前大规模安装测试问题的一些办法与思路
- python2.4升级到2.7后,解决安装json后模块不识别的问题
- 部分电脑安装升级 ubuntu 12.04 后无法挂起问题的解决(挂起无法唤醒同样有效)
- 解决app在没有上传app store前大规模安装测试问题的一些办法与思路
- 解决: 安装MSN7.0的1603的问题
- zz:彻底解决兼容性问题:Windows 7下载安装 Visual C++ 6.0(VC6)
- ubuntu11.04安装NetBeans 7.0中文显示乱码或者方框问题的解决(JRE中文字体设置)
- 解决 Mac App Store 下载应用程序、安装应用程序过程中遇到的问题。
- ubuntu11.04安装NetBeans 7.0中文显示乱码或者方框问题的解决(JRE中文字体设置)
- 【转】部分电脑安装升级 ubuntu 12.04 后无法挂起问题的解决(挂起无法唤醒同样有效)