2014-07-18 57 views
5

我想爲此創建的SD卡或外接SD卡數據庫,我有嘗試這個代碼,並利用這一點,我已經成功地創建數據庫中的SD卡,但在logcat中它給我的警告像下面chmod失敗:EPERM(操作不允許)在Android?

logcat的

07-18 14:18:22.140:W /文件實用程序(8595):無法 CHMOD(到/ mnt/SD卡/ peakmedia/DB_PMD):libcore.io.ErrnoException:文件模式 失敗:EPERM(操作不允許)

DB_Helper.java

public class DB_Helper extends SQLiteOpenHelper 
{ 

    public DB_Helper(Context context) 
    { 
     super(context, Environment.getExternalStorageDirectory().getAbsolutePath() 
         + File.separator + DB_Constant.DB.FILE_DIR 
         + File.separator + DB_Constant.DB.DATABASENAME, null, DB_Constant.DB.DB_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     String query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYFILES_TABLE); 
     db.execSQL(query); 


     query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYUSERS_TABLE); 
     db.execSQL(query); 

     query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYPLAYLIST_TABLE); 
     db.execSQL(query); 

     query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYDEVICE_TABLE); 
     db.execSQL(query); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
      if(newVersion > oldVersion) 
      { 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYFILES); 
       onCreate(db); 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYUSERS); 
       onCreate(db); 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYPLAYLIST); 
       onCreate(db); 

       db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYDEVICE); 
       onCreate(db); 

      } 
    } 
} 

回答

-1

你必須改變這個文件夾的所有者(CHOWN)。目前,應用程序/您不是該文件夾的所有者,您要在其中安裝數據庫。

所以,你必須做一些像

sudo chown -R theuser /mnt/sdcard/peakmedia/DB_PMD 
0

昨天我遇到了同樣的問題,像馬赫什(出現相同的警告信息,從SQL Server到SQLite的插入數據,2個表應該在SQLite的接收數據,但只有1表中收到數據,另一個表爲空)。

但是今天我試着再次將數據從SQL服務器插入到SD卡中的SQLite的2個表中,這次,2表收到數據。

唯一的區別是EMULATOR設置。

放大SD卡空間設置,從幾MB到8GB,參考圖片。 emulator setting photo

雖然警告也出現,但插入工作成功。

3

剛剛解決了這個問題。

你必須讓你的應用程序加入linux build來授予它SYSTEM權限。

  1. 將此行添加到Android。MK

    LOCAL_CERTIFICATE := platform

  2. 添加入AndroidManifest.xml

    android:sharedUserId="android.uid.system"

  3. 清單節點此

    生成APK並將其推入/系統/應用/

  4. 現在你可以試着運行

    final String command = "chmod 777 /data/ena"; 
    Process p = Runtime.getRuntime().exec(command); 
    

    File file = new File("/data/ena"); 
    if (file.exists()) { 
        boolean result = file.setExecutable(true); 
        Log.e(TAG, "trpb67, RESULT IS " + result); 
    } 
    

    結果的值應該是真實的

0

檢查你的設備是否連接在MTP USB模式。有時以前的MTP模式連接可能會導致此問題。只需重啓設備並檢查它是否工作。

相關問題