android 內部儲存 安裝apk

來源:互聯網
上載者:User

 

 在做應用自動更新模組下載apk時遇到了內部儲存和sd卡儲存兩種情況,存在sk卡中儲存apk可以正常安裝,可是在內部儲存中安裝apk時出現了parse error的問題。

在網上搜了搜,大致分為兩種方案:

1、在儲存時給檔案設定許可權

2、在使用檔案之前變更檔許可權

起初思路並沒有理清,就開始嘗試,多次嘗試之後問題仍沒有解決,再請教了大牛之後才開始一點點分析。

首先使用普通的檔案讀寫

 

 File apkFile = new File(mSavePath, appName); FileOutputStream fos = new FileOutputStream(apkFile); 

 然後使用方式情節2:

 

 String chmodCmd = "chmod 666 " + apkfile.getAbsolutePath(); try {             Runtime.getRuntime().exec(chmodCmd); } catch (Exception e) { } Intent i = new Intent(Intent.ACTION_VIEW);         String filePath = "file://" + apkfile.toString(); i.setDataAndType(Uri.fromFile(apkfile),"application/vnd.android.package-archive"); mContext.startActivity(i);  

問題解決了。

回過頭來看方案一問什麼不起作用,當我看檔案時很吃驚,命名檔案是下載下倆了,可是調用完了以後檔案大小為0了,發現FileOutputStream fos = mContext.openFileOutput(appName,Context.MODE_WORLD_READABLE| Context.MODE_WORLD_WRITEABLE);在存檔案和調用apk安裝代碼之前分別使用了一次,openFileOutput方法再次調用導致檔案內容被清空,只需要在寫檔案的時候把檔案許可權置為讀寫權限便可。

 

 

String fileName = "tmp.apk";
FileOutputStream fos = openFileOutput(fileName,
        MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);

// write the .apk content here ... flush() and close()

// Now start the standard instalation window
File fileLocation = new File(context.getFilesDir(), fileName);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(fileLocation),
                       "application/vnd.android.package-archive");
context.startActivity(intent);

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.