Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 內部存儲 安裝apk

android 內部存儲 安裝apk

編輯:關於Android編程

 

 在做應用自動更新模塊下載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);

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved