2013-06-05 140 views
0

我打算去的場景如下:Android應用程序外部配置

  1. Android應用(APK),即「通用」,即我不想用不同的資源
  2. APK將重新編譯「預安裝」在設備上,因此不會成爲「市場」應用程序
  3. 應用程序需要一個自定義配置文件,用文本等對其進行自定義,這對每次安裝都可能不同。 (配置文件需要在相同的位置具有相同名稱)
  4. 在應用程序啓動時的配置文件被讀取和配置應用程序根據配置文件中

本質上的數據,這將是一個配置應用程序的方式,以便它根據配置文件呈現特定的外觀和感覺,而無需重新編譯。能夠加載自定義圖像文件,文本數據等。

問題是,配置文件需要輕鬆更新並「複製」到沒有SD卡的非根設備。因此,我需要訪問可通過USB連接輕鬆訪問的非應用程序特定位置,並且該APK可以在運行時訪問。看來SharedPreferences和Android文件IO僅限於/ data/data/pkg/...下的私人應用程序目錄或外部存儲。任何想法將不勝感激。謝謝。

回答

0

只是想我會更新至少部分答案。至少我的一些問題與我的Razr Maxx的調試模式下的測試有關。當我通過USB調試連接時,創建新文件的調用失敗,如下所示:

06-06 10:04:30.512:W/System.err(2583):java.io.IOException:打開失敗: EACCES(拒絕) 10月6日至6日:04:305.12:W/System.err的(2583):在java.io.File.createNewFile(File.java:940)

當我運行的應用程序的獨立在我的設備或模擬器上,然後它按預期工作。不確定這是否與Razr Maxx或其他問題有關?

我的代碼工作是(來源:Write a file in external storage in Android):

private void writeToSDFile(){ 

    // Find the root of the external storage. 
    // See http://developer.android.com/guide/topics/data/data- storage.html#filesExternal 

    File root = android.os.Environment.getExternalStorageDirectory(); 
    mStatusTV.append("\nExternal file system root: "+root); 

    // See https://stackoverflow.com/questions/3551821/android-write-to-sd-card-folder 

    File dir = new File (root.getAbsolutePath() + "/download"); 
    dir.mkdirs(); 
    File file = new File(dir, "myData.txt"); 


    try { 
     file.createNewFile(); 

     FileOutputStream f = new FileOutputStream(file); 
     PrintWriter pw = new PrintWriter(f); 
     pw.println("Hi , How are you"); 
     pw.println("Hello"); 
     pw.flush(); 
     pw.close(); 
     f.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     Log.i(TAG, "******* File not found. Did you" + 
       " add a WRITE_EXTERNAL_STORAGE permission to the manifest?"); 
     mStatusTV.append("Write File 1: " + e.getMessage()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     mStatusTV.append("Write File 2: " + e.getMessage()); 
    } 
    mStatusTV.append("\n\nFile written to "+file); 
}