編輯:關於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);
概述關於Android ColorFilter 和 Tint之間的關系一直混淆不清。兩者均是對顯示的圖片進行著色或者過濾。 ColorFilter: 色彩過濾 Tint:
在如今的互聯網時代,微信已是一個超級App。這篇通過ViewPager + Fragment實現一個類似於微信的界面,之前有用FragmentTabHost實現過類似界面
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,采用完全獨立於語言的文本格式,為Web應用開發提供了一種理想的數據交換格式。
一、簡介 1、地圖 地圖展示:普通地圖(2D,3D)、衛星圖和實時交通圖。 地圖操作:可通過接口或手勢控制來實現地圖的點擊、雙擊、長按、縮放