دليل البيانات لا يوجد لديه إذن قراءة/كتابة في Android

StackOverflow https://stackoverflow.com/questions/1998400

سؤال

أنا باستخدام Android 1.5 دليل البيانات الخاص بي لا يحتوي على أذونات القراءة/الكتابة

System.out.println("DAta can write??--->"+Environment.getDataDirectory().canWrite());
System.out.println("DAta can read??--->"+Environment.getDataDirectory().canRead());

لذا يرجى اقتراح لي كيفية تقديم أذونات لدليل البيانات.

ما أحاول القيام به هو إنشاء ملف وإضافة بعض المحتوى إليه في تخزين البيانات للمحاكي كما هو موضح أدناه

private void writeToSDCard() {
        try {

            File lroot = Environment.getDataDirectory();

            if (lroot.canWrite()){
                File lfile = new File(lroot, "samplefile.txt");
                FileWriter lfilewriter = new FileWriter(lfile);
                BufferedWriter lout = new BufferedWriter(lfilewriter);
                lout.write("XXXXXXXXXXXXXXXXXX");
                lout.close();
            }
        } catch (IOException e) {
            Log.e(m_cTAG, "Could not write file " + e.getMessage());
        }
    }
هل كانت مفيدة؟

المحلول

يجب ألا تنظر إلى دليل البيانات. هذا دليل نظام في تخزين الهاتف - عادة /data - ولن يكون للتطبيق الخاص بك إذنًا للكتابة إليه.

يتم إرجاع الدليل الذي يجب أن يكتبه التطبيق الخاص بك بالملفات بواسطة Context.getFilesDir() طريقة. سيكون شيئًا مثل /data/data/com.yourdomain.YourApp/files.

إذا كنت ترغب في الكتابة إلى ملف في تخزين الهاتف ، فاستخدم Context.openFileOutput() طريقة.

إذا كنت تريد المسار إلى SDCARD ثم استخدم Environment.getExternalStorageDirectory() طريقة. للكتابة إلى بطاقة SDCARD ، ستحتاج إلى إعطاء تطبيقك الأذونات المناسبة عن طريق إضافة ما يلي إلى بيانك:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

إذا كنت ستكتب إلى بطاقة SDCARD ، فستحتاج أيضًا إلى التحقق من حالتها باستخدام getExternalStorageState() طريقة.

إذا كنت تقوم بتخزين ملفات صغيرة لتفعلها مع تطبيقك ، فيمكن أن تدخل هذه في تخزين الهاتف وليس بطاقة SD ، لذا استخدم Context.openFileOutput() و Context.openFileInput() أساليب.

لذا في الكود الخاص بك ، فكر في شيء مثل:

OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE);
BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top