Android应用升级后安装到一半闪退解决方法
Android应用升级后安装到一半闪退解决方法
初始安装时,文件被保存在:
data/app + [包名].apk
覆盖安装N次后,文件名为:
data/app + [包名]-N.apk
获取文件时写法不变,在获取文件之后保存在本地目录后打开更新程序之前,动态获取当前下载文件名及路径,即可解决No content provider found for permission revoke问题。
范例如下:(只有获取以及打开部分。其余部分不变)
//下载文件部分(红字为需要注意部分,即动态获取到当前文件名,及路径,包括-N
LoginAutoUpdateActivity.mSavePath=PackageManager().getApplicationInfo("increase", 0).sourceDir;
                URL url = new URL(mURL);
                // 创建连接 
                HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
                t(); 
                // 获取文件大小 
                LoginAutoUpdateActivity.length = ContentLength(); 
                Log.d("我获取的文件大小","``````"+LoginAutoUpdateActivity.length);
                // 创建输入流 
                InputStream is = InputStream(); 
                File file = new File(LoginAutoUpdateActivity.mSavePath); 
                // 判断文件目录是否存在 
                if (!ists()) 
                { 
                    file.mkdir(); 
                } 
                File apkFile = new File(LoginAutoUpdateActivity.mSavePath, "mc-increase-v3.apk"); 
//                FileOutputStream fos = new FileOutputStream(apkFile); 
                FileOutputStream fos =  mContext.openFileOutput("mc-increase-v3.apk", mContext.MODE_WORLD_READABLE); 
                int count = 0; 
                // 缓存 
                byte buf[] = new byte[1024]; 
                // 写入到文件中 
                do 
                { 
                    int numread = is.read(buf); 
                    count += numread; 
                    // 计算进度条位置 
                  // progress = (int) (((float) count / length) * 100); 
                    LoginAutoUpdateActivity.progress=count;
                    // 更新进度 
                    mHandler.sendEmptyMessage(DOWNLOAD); 
                    if (numread <= 0) 
                    { 
                        // 下载完成 
                        mHandler.sendEmptyMessage(手机总是闪退是什么原因DOWNLOAD_FINISH); 
                        break
                    } 
                    // 写入文件 
                    fos.write(buf, 0, numread); 
                } while (!LoginAutoUpdateActivity.cancelUpdate);// 点击取消就停止下载. 
                fos.close(); 
                is.close(); 
//打开文件部分(红字体部分为获取当前的实际文件,被注释的是写死的部分,在很多手机下会无法读取)
/**
    * 安装APK文件
    */ 
  private void installApk
  { 
//      File apkfile = new File(mSavePath,"mc-increase-v3.apk");
      File apkfile=new File(mSavePath);
      Log.d("mSavePath", mSavePath);
      if (!ists()) 
      { 
          return
      } 
      // 通过Intent安装APK文件 
      String cmd = "chmod 777 " +mSavePath;
      try {
          Runtime.getRuntime().exec(cmd);
        } catch (Exception e) {
            e.printStackTrace();
        }   
       
      Intent i = new Intent();
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      i.t.Intent.ACTION_VIEW);
      i.setDataAndType(Uri.parse("file://" + String()), "application/vnd.android.package-archive"); 
      startActivity(i); 
  } 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。