-
المساهمات
32 -
تاريخ الانضمام
-
تاريخ آخر زيارة
آخر الزوار
621 زيارة للملف الشخصي
إنجازات رفيق هادي مبارك هادي مشعيل
-
حياك الله أخي مصطفى، شُكراً على تفاعلك. جربت الطريقة التي وضحتها ولكن لا تزال تظهر نفس المشكلة. اعتذر عن الازعاج، ولكن بسبب ضعف الانترنت عندنا، وعدم توفر الشبكة في كل الأماكن لدي اضطر لوضع السؤال ورفعه بدلاً من البحث والتنقل بين عدة مواقع والتجربة للوصول للحل، ولكن الحمد لله بعد عدة محاولات للبحث عندما توفرت لي الشبكة وجدت الحل، بعد تجربة عدد من الحلول التي وجدتها. خلاصة المشكلة: انه يتم ضغط الملفات المرفقة مع حزمة apk لتوفير مساحة التخزين كما فهمت من هذا النص: There is a limitations on opening compressed files in the assets folder. This is because uncompressed files can be directly memory mapped into the processes virtual address space, therefore avoiding needing the same amount of memory again for decompression. وهذا يسبب مشكلة في قرائتها بالطرق السابقة، ولهذا لا بد من استعمال الأكواد التالية، وكما أسلفت في السؤال فالمشكلة في دالة load() وبالتخصيص في الوسيط الخاص بتحديد الملف الصوتي، فالاكواد التي وضعتها في السؤال لا مشكلة فيها الا في المكان المحدد وحلها كالاتي: AssetFileDescriptor afd = null; try { //انشاء ملف في الكاش File cache = new File(getCacheDir(), "click.wav"); //التأكد من الملف غير موجود في الكاش، لكي لا يتم انشاءه في كل مرة احتجنا اليه if (!cache.exists()) { //نسخ ملف الصوت من ملف assets الى الملف الذي تم انشاءه في الكاش //copyInputStreamToFile(getAssets().open("click.wav"), cache); //نسخ ملف الصوت من ملف raw الى الملف الذي تم انشاءه في الكاش copyInputStreamToFile(getResources().openRawResource(R.raw.click), cache); } //قراءة الملف الصوتي من الكاش afd = new AssetFileDescriptor(ParcelFileDescriptor.open(cache, ParcelFileDescriptor.MODE_READ_ONLY), 0, AssetFileDescriptor.UNKNOWN_LENGTH); } catch (Exception e) { new AlertDialog.Builder(this).setMessage(e.getMessage()).show(); } //تحميل SoundPool بالملف الصوتي sound1 = soundPool.load(afd , 0); } // دالة عملها نسخ الملف من مجلد raw او مجلد assets الى المسار المحدد في الوسيط file private void copyInputStreamToFile(InputStream in, File file) { BufferedOutputStream bfos = null; try { bfos = new BufferedOutputStream(new FileOutputStream(file)); byte[] buf = new byte[4096]; int len; while ((len = in.read(buf)) != -1) { bfos.write(buf, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (bfos != null) { bfos.close(); } in.close(); } catch (IOException e) { e.printStackTrace(); }} ملاحظات: 1) وجدت الحل في الاجابة على سؤال مشابه لسؤالي على موقع stackoverflow: https://stackoverflow.com/questions/6186866/java-io-filenotfoundexception-this-file-can-not-be-opened-as-a-file-descriptor 2) قمت بشرح الكود على شكل تعليقات ليسهل فهمه لمن يطلع عليه 2) هذا الحل ينطبق على كل انواع الملفات الموجودة في raw او assets سواء اكانت صوتيه او صور او ملفات نصية ...
-
SoundPool soundPool; int soundClick; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { AudioAttributes audioAttributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build(); soundPool = new SoundPool.Builder().setMaxStreams(3) .setAudioAttributes(audioAttributes).build(); } else { soundPool = new SoundPool(3 , AudioManager.STREAM_MUSIC, 0); } soundClick = soundPool.load(this, R.raw.click , 1); soundPoolplay(soundClick, 1, 1, 1, 0, 1);
-
السلام عليكم لدي في مشروعي وضعت فيه SoundPool من أجل تشغيل بعض التأثيرات الصوتية، وكان كل شيء جاهز، ولكن اردت أن اضيف بعض الأشياء الى مشروعي وهذه الأشياء تتطلب أن يكون minSDK (اصغر اصدار اندرويد مدعوم) هو SDK 21 ، وكانت لدي هي SDK 16 وعندما قمت بتغييرها في ملف gradle الى 21 حدثت معي مشكلة في SoundPool. الكود التالي هو كود SoundPool الذي استعمله في مشروعي: SoundPool soundPool;//لا بد ان يكون في مكان عام int soundClick;//لا بد ان يكون في مكان عام //انشاء اداة soundP //ool (عادتا ما يكون داخل onCreate) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { AudioAttributes audioAttributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build(); soundPool = new SoundPool.Builder().setMaxStreams(3) .setAudioAttributes(audioAttributes).build(); } else { soundPool = new SoundPool(3 , AudioManager.STREAM_MUSIC, 0); } //تحميل الاداة بالملف الصوتي الذي نريد تشغيله soundClick = soundPool.load(this, R.raw.click , 1); //R.raw.click هو الملف الصوتي في مجلد raw /* المشكلة حدثت في هذا السطر فبعد تتبعي للكود واستعمال try catch وجدت ان الكود يعمل بدون مشاكل الا هذا السطر ورسالة الخطاء التي تظهر هي File res/raw/click.wav from drawable resource ID #0x7f080000 /* اما بالنسبة لكود تشغيل الملف الصوتي فهو: soundPoolplay(soundClick, 1, 1, 1, 0, 1); //وهذا الكود عادتا ما يكون داخل حدث النقر على زر //وهذا الكود يعمل بدون مشاكل ولا يوجد مشكلة الا في الكود الذي تم توضيحه سابقا بحثت في النت ووجدت مجموعه من الحلول جربت الكثير منها ولكن بدون فائدة. ملاحظات: 1) عندما اقوم بتغيير minSDK الى SDK اصغر من 21 مثلا 20 او 19 يعمل الكود بدون مشاكل ، ولا تحدث المشاكل الا اذا وضعته 21 او اكبر. 2) جربت طريقة اخرى لتحميل الملف الصوتي للاداة، اي في الجزء الذي حدثت فيه المشكلة، هذه الطريقة هي: soundClick.load(getAssets().openFd("move.wav"),0); // هذه الطريقة تختلف عن السابقة انه يتم وضع الملف الصوتي في المجلد assets // ولكن بدون فائدة وظهرت رسالة الخطاء هذه //This file can not be opened as a file descriptor; it is probably compressed
-
شكرا لك أخي ياسر على تفاعلك. جربت تغيير المسار الى Download وحدثت نفس المشكلة، وجربت ايظا مسار Android وحدثت نفس المشكلة ايظاً. بالنسبة لانشاء KeyStor بالحاسوب، انشأته باستخدام بيئة Android Studio وعندما قمت بمحاولة تصدير تطبيقي بواسطته ظهرت لي الرسالة Invalid keystore credentials! كانت المشكلة أن لغة الهاتف لدي هي اللغة العربية، عندما قمت بتغييرها للغة الانجليزية تمت بنجاح. على العموم شكراً لك، لقد حُلَّت مشكلتي.
-
انا استعمل بيئة AIDE (تعمل على الهاتف) لبرمجة تطبيقات الاندرويد، انشأت مشروعي وصار جاهز ولا يوجد به اي مشاكل، ولكن لكي أتمكن من رفعه على المتجر احتاج لـ KeyStor مع تصدير البرنامج على شكل release ، وقد اتبعت الخطوات التالية التي في الصورة التالية (الخطوات من اليسار الى اليمين). ولكن يضهر الرسالة الآتية: Failed to create keystore file /storage/emulated/0/AppProjects/release_key.jks وهي تعني فشل الإنشاء لـ keystore. حاولت أكثر من مرة ولم انجح ولم اعرف سبب المشكلة، اذا يستطيع أحد أن يفيدني في حل المشكلة؟ مشكورين.
- 2 اجابة
-
- 1
-
السلام عليكم ورحمة الله وبركاتة اريد كيفية تثبيت وتهيئة محرر النصوص (بيئة) VHEditor على هواتف الأندرويد ، وبالأخص تحميل متطلبات برمجة تطبيقات الاندرويد باستخدام لغة dart و flutter فانا اواجه صعوبة في ذلك ، فقد قمت بتثبيت VHEditor على هاتفي ولكن عندما اريد تحميل متطلبات dart و flutter من المكان المخصص لتحميلها بداخل VHEditor تظهر ادوات dart و flutter بشكل باهت ولا يمكن النقر عليها لتنزيلها ويظهر ايظا هذه الرسالة BlobNotFoundThe specified blob does not exist. RequestId:0ef85753-e01e-00e4-71e8-1ff702000000 Time:2023-01-04T03:02:23.2229769Z الصورة توضح ذلك ------------------- معلومات: VHEditor هو عبارة عن محرر نصوص نفس viscul code الذي يعمل على الكمبيوتر ، وهذا المحرر يمكن تثبيت بيانات (مترجمات) لكثير من اللغات ليتم تنفيد الاكواد بتلك اللغات. هاتفي الذي اعمل عليه vivo v2027 ونسخة الاندرويد 10 نسخة VHEditor التي لدي هي : 1.9.0 (31)
-
السلام عليكم ورحمة الله وبركاتة لدي كود بلغة c من نوع متقدم (اي هياكل بيانات بـstruct) . يوجد لدي ثلاث دوال احداها للاضافة واثنتان للبحث. الدوال جاهزة . الذي اريدة هو كيف يمكنني استدعاء تلك الدوال في main().هذا هو الكود: #include <stdlib.h> #include <iostream.h> #include <string.h> #include <stdio.h> #include <conio.h> //التصريح عن المتحوالت التي تمثل الانماط الاربعة #define _int 1 #define _float 2 #define _str 3 #define _chr 4 //تعريف تركيبة تمثل بنية جدول الرموز typedef struct sym_node { char name[51]; struct sym_node *next; int type; }; //sym_node sym_node *sym_table = NULL; // الرموز جدول إنشاء //اضافة رمز تابع الى جدول الرموز sym_node *put_sym(char *sym_name, int sym_type) { sym_node *ptr; ptr = (sym_node *)malloc(sizeof(sym_node)); strcpy(ptr->name, sym_name); ptr->type = sym_type; ptr->next = (sym_node *)sym_table; sym_table = ptr; return ptr; } //البحث عن رمز ضمن جدول الرموز sym_node *get_sym(char *sym_name) { sym_node *ptr; for(ptr=sym_table;ptr!=NULL;ptr=(sym_node*)ptr->next) if(!strcmp(ptr->name,sym_name))return ptr; return NULL; } //التحقق من نوع بيانات الرمز int get_sym_type(char *sym_name) { sym_node *ptr; for(ptr=sym_table;ptr!=NULL;ptr=(sym_node*)ptr->next) if(!strcmp(ptr->name,sym_name)) return ptr->type; return 0; } int main(){ } مشكورين مقدما وجزاكم الله كل خير
-
اجعل نسب عرض وطول الصورة نسبية بدلا من وضعها نسب ثابتة width="100%" بدلا من px وكذلك height
- 2 اجابة
-
- 1
-
رفيق هادي مبارك هادي مشعيل بدأ بمتابعة التحريك عبر CSS
-
السلام عليكم ورحمة الله وبركاتة قمت بعمل تطبيق بالجافا للاندرويد ، ومن محتوياته كود لحذف عدة ملفات بعظها في التخزين الداخلي واخرى في التخزين الخارجي. وهذا هو الكود: اولاً : قمت بعمل دالة للحذف: 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 في البرمجة
-
في الاصدارات القديمة من الاندرويد اذا كنت تريد لتطبيقك بالوصول الى الملفات في الذاكره كان يكفي ان تضع هذين السطرين في ملف androidmanifist.xml فقط: <!-- قراءة محتويات بطاقة SD --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!-- تعديل محتويات بطاقة SD أو حذفها --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> وعندما يتم تثبيت التطبيق يكون قد تم السماح بالقراءة والكتابة من ذاكرة الهاتف وكذلك الذاكرة الخارجية. ولكن في الاصدارات الجديده من اندرويد حتى وان تم تضمين السطرين السابقين فلا بد من كتابة كود يعرض رساله للمستخدم ليسمح للتطبيق بالوصول او يرفضه ، واذا سمح بالوصول هنا فانه يسمح بالقراءة والكتابة في ذاكرة الهاتف فقط اما الذاكرة الخارجية فانه فقط يسمح بالقراءة منها فقط ، اي لا بد ان يكتب المبرمج كود آخر خاص يعرض رسالة اخرى تطلب من المستخدم تفويض التطبيق للكتابة في الذاكرة الخارجيه. السؤال : انا عملت تطبيق يتعامل مع الملفات وعندما اقوم باستعراض ملف من الذاكرة الخارجية يتم بنجاح ولكن عندما اقوم بانشاء ملف جديد او حذف ملف لا يعمل اي شيء (لا يتم). وعندما بحثت في عدة مواقع في النت وجدت الكود المطلوب وهو كود طويل شي ما ولكن لا مشكلة فالمشكلة هي : ان اجزاء من ذلك الكود مأخوذه من الكلاس ActionCompat وانا اتعامل مع الكلاس Action فهل : اذا ردت ان اجعل تطبيقي يطلب من المستخدم اعطاءة تفويض للكتابة (permission write) على الذاكرة الخارجية (sd) . هل احتاج الى AndroidCompat التي يرث كلاس النشاط فيها من كلاس ActivityCompat بدلا من كلاس Activity.
-
شوف الصورة التالية قمت بعمل استعلام لبياناتك في SQL: اما بالنسبة لا ستعمال قواعد البيانات في PHP فليس لدي خبره كافيه فيها ولكن شوف الصورة التاليه التقطتها من كتاب تعليمي لـ PHP :
- 9 اجابة
-
- 1
-
ولكن AlarmManager يستدعي كلاس BroadcastReceiver انا فقط بدلا من جعل العمل يتنفذ في فترات زمنيه متعاقبه جعلته يتنفذ عند حدوث تغيير في حالة wifi. المشكلة هي في ان النظام يحاول ان يجعل النظام يعمل باداء جيد كما اسلفت انت ولحل المشكلة على مستخدم التطبيق ان يقوم بقفل التطبيق حتى لا يتم ازالته من الرام تلقائيا الصورة التاليه توضح ذلك