簡體   English   中英

chmod失敗:Android中的EPERM(不允許操作)?

[英]chmod failed: EPERM (Operation not permitted) in android?

我想為此在sdcard或外部sdcard中創建數據庫,我嘗試過此代碼,並使用此代碼,我已成功在sdcard中創建數據庫,但在logcat中,它給我以下警告

Logcat

07-18 14:18:22.140:W / FileUtils(8595):無法執行chmod(/ mnt / sdcard / peakmedia / DB_PMD):libcore.io.ErrnoException:chmod失敗: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);

            }
     }
}

剛剛解決了這個問題。

您必須讓您的應用加入linux build才能授予它SYSTEM權限。

  1. 將此行添加到Android.mk

    LOCAL_CERTIFICATE := platform

  2. 將此添加到AndroidManifest.xml清單節點中

    android:sharedUserId="android.uid.system"

  3. 生成apk並將其推送到/ system / app /

  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); } 

    結果值應為true

昨天我遇到了類似Mahesh的問題(出現相同的警告消息,將SQL Server中的數據插入SQLite,SQLite中有2個表應該接收數據,但是只有1個表接收了數據,另一個表為空)。

但是今天,我嘗試將來自SQL Server的數據再次插入SD卡中的2個SQLite表中,這一次,有2個表接收到數據。

唯一的區別是仿真器設置。

擴大SD卡的空間設置,從幾MB到8GB(參考圖片)。 模擬器設置照片

盡管也出現警告,但插入工作成功。

檢查您的設備是否以MTP USB模式連接。 有時以前的MTP模式連接可能會導致此問題。 只需重新啟動設備,然后檢查它是否可以工作。

您必須更改此文件夾的所有者(chown)。 當前,應用程序/您不是您要在其中安裝數據庫的文件夾的所有者。

所以你必須做類似的事情

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM