اذهب إلى المحتوى
  • 0

صلاحيات الكتابة على التخزين الخارجي في تطبيقات اندرويد

السؤال

السلام عليكم ورحمة الله وبركاتة
 قمت بعمل تطبيق بالجافا للاندرويد ، ومن محتوياته كود لحذف عدة ملفات بعظها في التخزين الداخلي واخرى في التخزين الخارجي.
وهذا هو الكود:
اولاً : قمت بعمل دالة للحذف:

public void funDelete(File folder){
  try{
    File[] cont_file=folder.listFiles();
    for(File file : cont_file){
      file.delete();
    }
  }
  catch(Exception ex){
    //Toast.makeText(c,ex.getMessage(),1).show();
  }
}


ثانياً : استدعاء دالة الحذف:

//كل المسارات
String [] paths={"/storage/emulated/0/SHAREit/download/videos/.caches"
  ,"/storage/sdcard1/SHAREit/download/videos/.caches"
  ,"/storage/sdcard1/Android/data/com.lenovo.anyshare.gps/files/SHAREit/download/videos/.caches"};
for(String path : paths){
  try{
    File folder=new File(path);
    if(folder.exists())
      funDelete(folder);
  }
  catch(Exception ex){
    Toast.makeText(c,ex.getMessage(),1).show();
  }

وقمت بعمل الاكواد الاخرى التي يتطلبها التطبيق كالصلاحيات التي في ملف androidmanifest.xml

<!-- قراءة محتويات بطاقة SD -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<!-- تعديل محتويات بطاقة SD أو حذفها -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

وكذلك الكود  الذي يطلب من المستخدم باعطاء الصلاحية لهذا التطبيق او رفضها والكود كالاتي :

//دالة للتأكد من اصدار الاندرويد
protected boolean shouldAskPermissions() {
  return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

 

// @TargetApi(23)
//دالة اعطاء الصلاحيات او رفضها
protected void askPermissions() {
  String[] permissions = {
    "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"
  };
  int requestCode = 200;
  requestPermissions(permissions, requestCode);
}

حيث يتم استدعاء الدالتين كالاتي :

if (shouldAskPermissions()) askPermissions();

المشكلة التي حصلت لدي انه فقط يتم حذف الملفات التي في التخزين الداخلي 

"/storage/emulated/0/SHAREit/download/videos/.caches"

اما التي في التخزين الخارجي فانه لا يتم حذفها

,"/storage/sdcard1/SHAREit/download/videos/.caches"
,"/storage/sdcard1/Android/data/com.lenovo.anyshare.gps/files/SHAREit/download/videos/.caches"

ولكن عندما قمت بعملية قراءة (عرض) الملفات التي في التخزين الخارجي تم بنجاح ، اي ان المشكلة هنا هي في الكتابة على الملف (كاضافة ملف او حذفه).
بصراحة بحث في النت عن اكواد ولكن لم استطع ان اوصل لحل مشكلتي.

للعلم انا اتعامل مع Android X في البرمجة

تم التعديل في بواسطة Hassan Hedr
تنسيق الشيفرة
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

بما أنك تحاول إدارة ملفات مشتركة لا يمكلها تطبيقك سيحتاج التطبيق للصلاحية التالية: 

android.permission.MANAGE_EXTERNAL_STORAGE

يمكنك التحقق من سماح المستخدم لتلك الصلاحية باستدعاء التابع التالي

Environment.isExternalStorageManager()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 12/9/2021 at 12:23 قال رفيق مشعيل الوادعي:

مشكور اخي

ولكن اريد ان اعمل كالذي في الصورة الاتيه .

 سيتم إظهار مربع الحوار هذا عندما تحاول طلب السماحية عن طريق requestPermissions

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...