-
المساهمات
32 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو رفيق هادي مبارك هادي مشعيل
-
حياك الله أخي مصطفى، شُكراً على تفاعلك. جربت الطريقة التي وضحتها ولكن لا تزال تظهر نفس المشكلة. اعتذر عن الازعاج، ولكن بسبب ضعف الانترنت عندنا، وعدم توفر الشبكة في كل الأماكن لدي اضطر لوضع السؤال ورفعه بدلاً من البحث والتنقل بين عدة مواقع والتجربة للوصول للحل، ولكن الحمد لله بعد عدة محاولات للبحث عندما توفرت لي الشبكة وجدت الحل، بعد تجربة عدد من الحلول التي وجدتها. خلاصة المشكلة: انه يتم ضغط الملفات المرفقة مع حزمة 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
-
السلام عليكم ورحمة الله وبركاتة قمت بعمل تطبيق بالجافا للاندرويد ، ومن محتوياته كود لحذف عدة ملفات بعظها في التخزين الداخلي واخرى في التخزين الخارجي. وهذا هو الكود: اولاً : قمت بعمل دالة للحذف: 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. المشكلة هي في ان النظام يحاول ان يجعل النظام يعمل باداء جيد كما اسلفت انت ولحل المشكلة على مستخدم التطبيق ان يقوم بقفل التطبيق حتى لا يتم ازالته من الرام تلقائيا الصورة التاليه توضح ذلك
-
ما الفرق بين : Android app التي يكون فيها الكلاس الخاص بالنشاط يرث من كلاس Activity Android AppCompatApp التي يكون فيها الكلاس الخاص بالنشاط يرث من كلاس AppCompatActivity AndroidX App التي يكون فيها الكلاس الخاص بالنشاط يرث من كلاس AppCompatActivity وماذا يعني كل منهم ، وما هي استخداماته ، وما هو الافظل منهم ؟ لانني انا استعمل بيئة (AIDE) المصغره على الهاتف لعمل تطبيقات الاندرويد بلغة الجافا ، وهي تعمل بالنوع الاول والذي يكون فيه كلاس النشاط يرث من كلاس Activity ، وعندما ابحث عن اكواد في النت لاستعمالها في تطبيقاتي لا تعمل لانها من النوعين الآخرين .
-
قمت بعمل كلاس يرث من BroadcastReceiver ليعمل في الخفاء. كالاتي: public class aaa extends BroadcastReceiver { Context c; @Override public void onReceive(Context context, Intent intent){ //الكود الذي نريد تنفيذة في الخفاء { وقمت بعملية الاستدعاء او التنفيذ كالاتي: في ملف Androi Manifest. xml <receiver android:name=".aaa" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> </intent-filter> </receiver> اي انة سيتم التنفيذ او الاستدعاء عندنا تتغير حالة wifi . عندما قمت بتثبيت التطبيق (قمت بازالتة من التطبيقات المصغره) وغيرت حالة wifi تمت العملية بنجاح ، ولكن : اذا تركت الهاتف مدة ثم قمت بتغيير حالة wifi لا يتم اي عمل. الا اذا قمت بتشغيل التطبيق مرة اخرى وهكذا بعد كل مدة. لو تفظلتم ممكن احد يفيدنا .
-
انا عملت تطبيق يعمل في الخفاء عند تنفيذ مهمه محددة . الكود هو كالاتي : اولا : عملت كلاس يرث من BroadcastReceiver كالاتي : public class bbb extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context," السلام عليكم ",1).show(); } } حيث يتم استدعائه وتنفيذ الكود الذي بداخله عندما يتم تغيير حالة WIFI او عند تغيير حالة وضع الطائرة ويتم ذلك بوضع الاكواد التالية في ملف androidmanifest.xml : الاستدعاء عند تغيير وضع الطائره: <action android:name="android.intent.action.AIRPLANE_MODE"/> الاستدعاء عند تغيير حالة WIFI : <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> وذلك كالاتي : <receiver android:name=".aaa" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.AIRPLANE_MODE"/> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> </intent-filter> </receiver> الذي اريده انا : 1. هل يمكن الاستدعاء يتم عند تشغيل تطبيق آخر (بدلا من الاستدعاء عند تغيير حالة wifi او وضع الطائره) مثلا عند تشغيل متصفح الذاكرة. 2. بدلا من الاستدعاء عند تغيير حالة wifi هل يمكن جعلة يستدعي فقط عندما يتم تشغيل wifi (اي انه كان wifi شغال وقمنا باطفاءة لا يتم الاستدعاء)
-
قمت بتجربة هذا الكود ولكن: 1. هذا الكود لا يعمل الا عندما اقوم بتشغيل البرنامج الذي يحتوي على الكود ، انا اريد أن اقوم بتثبيته فقط ثم هو يقوم بالعمل عندما يتم تشغيل البرنامج المحدد 2. عندما قمت بتنفيذ الكود (وبدل الاختبار جعلته يعرض اسماء التطبيقات التي تعمل) ولكن لم يعرض لي الا اسم برنامجي الذي يحوي هذا الكود . طبعا بعد ان قمت بعمل دوارة منتهيه بدل while التي وضعتها كغير منتهيه مثلا جعلتها تدور عشر مرات ولكن كل ما تم عرضه هو فقط اسم برنامجي مع العلم انه كان يوجد عدة تطبيقات تعمل في الخلفية مشغل موسيقى وفيديو وعدة تطبيقات ولكن لم يعرضها يا اخي بالمختصر اريد ان تطبيق يقوم بحذف ملفات الفيديو التي بتم عرضها في الشاشة الرئيسية لتطبيق SHAREit . قمت بعمل التطبيق وجعلته يعمل في الخفاء حيث عملت Alarm Manager يستدعي دالة الحذف في كل دقيقة وتم العمل بنجاح ، ولكن هذة الطريقة تستهلك البطارية ، فبدلا من عمل التطبيق دائما اريده فقط ان يعمل عندما يكون تطبيق SHAREit نشط.
-
هل يمكن ان اجعل برنامجي (بلغة الجافا للاندرويد) يتحسس او يشعر بتشغيل برنامج آخر. اي انني اريد برنامجي يقوم بتنفيذ مهمه في الخفاء عند تشغيل تطبيق محدد.
- 3 اجابة
-
- 1
-
واجهتني المشكلة وانا انشئ صفحات انترنت باستخدام تقنية asp.net C# هلا فيك اخي عندما اقوم بعرض البيانات كامل فانه يتم عرضها كامل عربي او انجليزي بدون اي مشاكل ولكن المشكلة عندما اعمل بحث عن اسم لعرض كامل بياناته مثلا: لدي في قاعدة البيانات في عمود الاسماء رفيق هادي و saleh ahmd -------------- فعندما اقوم بعرض الكل يتم العرض بدون اي مشاكل ولكن عندما اريد عرض بيانات رفيق هادي فاقوم بكتابة رفيق هادي في textbox والضغط على زر عرض الذي ينفذ امر الاستعلام بشرط ان يكون عمود الاسماء يساوي النص الذي بداخل textbox فانه يعرض ما مفاده ان هذا الاسم غير موجود ولكن عندما اكتب saleh ahmd فانه يعرض بياناته بدون مشاكل