كيف استخدام ActivityResultLauncher بعد التحديث الاخير لاندرويد ستوديو

كيف استخدام ActivityResultLauncher بعد التحديث الاخير لاندرويد ستوديو


 كيف استخدام ActivityResultLauncher بعد التحديث الاخير لاندرويد ستوديو

كما نعلم ان برنامج اندرويد ستوديو يقوم بشكل مستمر بتنزيل الكثير من التحديثات والتي قد تسبب مشاكل في الاكواد القديمه التي تعودنا عليها ولكن يكون للتحديثات التي يقومون بها سبب , ومن ضمن التحديثات هو عدم تشغيل خاصية ActivityResultLauncher ولكن في مقالة اليوم سوف نحاول ان نشرح لكم كيف تستطيع التعامل معها مع التحديث الاخير وبالمناسبة الوضع اصبح اسهل من قبل وفي هذا المقال نقدم لك اكثر من مثال لتوضيح الفكرة .


ماهو اندرويد ستوديو ؟

إنه IDE خاص بنظام Android تم إنشاؤه مع وضع برمجة Android في الاعتبار. تم الكشف عنه في 16 مايو 2013 ، خلال مؤتمر Google السنوي I / O. لتصميم تطبيقك واختباره وتصحيحه وتوصيفه ، ستحتاج إلى استخدام استوديو Android ، الذي يأتي مع جميع أدوات Android sDK. بالنظر إلى أدوات التطوير والبيئة ، يمكننا أن نرى أنه يمكن مقارنته بـ eclispe مع المكون الإضافي ADT ، ولكن نظرًا لأنه IDE يركز على android ، فهناك الكثير من الميزات الرائعة في Android Studio التي يمكن أن تساعدك على البناء بشكل أسرع.


أحد أفضل الأشياء المتعلقة به هو أنه يعتمد على IntelliJ Idea IDE ، والذي أثبت أنه IDE رائع يستخدمه جميع مطوري Android تقريبًا.


عرض Toast بعد الرجوع من Activity

عند الانتقال الى activity اخرى والرجوع الى الاكتفتي التي تعمل عليها سوف تلاحظ ظهور رسالة welcome back ,  I'm Here . والسبب اننا وضعنا الكود بداخل ActivityResultLauncher والحدث Intent اي بعد الانتقال والرجوع احصل على النتيجه , وعند الانتقال بعد الضغط على الزر قم بإستدعاء الobject الموجود للActivityResultLauncher وهو ar وبعدها launch لتنفيذ الكود واكتب بداخله الكود الذي تريده وهنا قمنا بعمل انتقال من صفحة الى صفحة اخرى .


عرض Toast بعد الرجوع من Activity

code.java


        ActivityResultLauncher<Intent> ar = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
                    @Override
                    public void onActivityResult(ActivityResult result) {
                        Toast.makeText(MainActivity.this, " welcome back ,  I'm Here .  ", Toast.LENGTH_SHORT).show();
                    }
                });

        binding.btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ar.launch(new Intent(getBaseContext() , MainActivity2.class));
            }
        });
        


الانتقال الى الالبوم والحصول على الصور وعرضها داخل التطبيق

هنا نفس الفكرة السابقة ولكن بدلا من الانتقال نريد الحصول على اسم الصورة او رابطها ولهذا سوف نستخدم String بداخل ActivityResultLauncher وعند عملية الانتقال سوف ينتقل الى الالبوم وعرض جميع الصور وعند الرجوع سوف يعرض الصورة التي قمت بإختيارها عن طريق الUri الخاص بها .


الانتقال الى الالبوم والحصول على الصور وعرضها داخل التطبيق

getImage.java


        ActivityResultLauncher<String> ar = registerForActivityResult(
                new ActivityResultContracts.GetContent(), new ActivityResultCallback<Uri>() {
                    @Override
                    public void onActivityResult(Uri result) {
                        binding.img.setImageURI(result);
                    }
                });

        binding.btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ar.launch("image/*");
            }
        });
        


تنفيذ permission عند النقر على الزر

تاكد اولا من وضع uses-permission داخل الmanifest وهو android.permission.WRITE_EXTERNAL_STORAGE لكي نقرأ ملفات النظام , وهذا اسهل من كتابة عدد كبير من اسطر الكود للوصل الى النتيجه وهي جعل التطبيق يستطيع قراءة ملفات الهاتف .


تنفيذ permission عند النقر على الزر

permission.java


        ActivityResultLauncher<String> ar = registerForActivityResult(
                new ActivityResultContracts.RequestPermission(), new ActivityResultCallback<Boolean>() {
                    @Override
                    public void onActivityResult(Boolean result) {
                        Toast.makeText(MainActivity.this, ""+result, Toast.LENGTH_SHORT).show();
                    }
                });

        binding.btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ar.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            }
        });


فيديو الشرح


لمزيد من المقالات


تعليقات