شرح بناء الworkmanager وارسال Data من activity الى workmanager اندرويد ستوديو

 

شرح بناء الworkmanager وارسال Data من activity الى workmanager اندرويد ستوديو

شرح بناء الworkmanager وارسال Data من activity الى workmanager اندرويد ستوديو


في هذا الدرس سوف نشرح لكم ارسال بيانات من الاكتفتي الى الورك مانجر وهذا يعد اول درس في قسم الورك مانجر بالاندرويد ستوديو وسيتم وضع لكم الكثير من المقالات في هذا القسم ويعد workmanager من اكثر الوظائف استخداما بشكل كبير وقد لا يخلو تطبيق قوي من الورك مانجر .


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


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


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


ماهو work manager في اندرويد ستوديو ؟


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


كيفية استخدام WorkManager في androidstudio


بسوف تحتاج الى اضافة المكتبه التالية في المكان المخصص لها وهو بداخل build gradle


dependencies {
    implementation "androidx.work:work-runtime:2.5.0"
}


في هذا الرابط developer.android والمقدم من موقع تطوير الاندرويد يوجد تحديثات مستمره في WorkManager حيث ان الاصدار الذي نستخدمه هو 2.5.0 قد يصدر اصدارات احدث وهذا امر متوقع جدا لذلك حاول التوجه الى هذا الموقع ومشاهدة ما هو احدث اصدار وكتابته بدلا من الرقم 2.5.0 وبعدها عمل sync now .



لو حصل مشكلة في استخدام Data Binding Library الخاصه بك قم باستبدالها بهذا الكود وسوف تحل معك ( قد لا تحتاجها لو لم يحدث مشاكل )


    buildFeatures {
        dataBinding true
    }


buildFeatures code


ارسال بيانات من الاكتفتي الى الورك مانجر

انشاء work manager class لتشغيل الورك مانجر 


قم بعمل كلاس جديد باسم MyWorkManager او اي اسم تريدة وتجعله يرث من worker سوف تلاحظ ظهور ايرور قم بالنقر على alt + enter ليظهر لك حل المشكلة قم بهذة الخطوة مرتين لانشاء doWork و MyWorkManager وبداخل doWork ضع الكود الذي تريد تشغيله في الخلفيه وهنا استخدمت خدمة firebase لذلك قم بتفعيلها وربطها في تطبيقك وتشغيل FirebaseFirestore وبعدها ناخذ الاسم الذي يدخله المستخدم ونقوم بتخزينه في قواعد البيانات عن طرق key الذي باسم name وسوف يحفظة داخل collection باسم names وبعدها Result.success لكي يرجع النجاح ( اذا نجحت العملية ) .


انشاء work manager class لتشغيل الورك مانجر

MyWorkManager.class


public class MyWorkManager extends Worker {
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    public MyWorkManager(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {
        String name = getInputData().getString("name");
        String web = getInputData().getString("name");

        Map<String, Object> user = new HashMap<>();
        user.put("name", name);
        user.put("web", web);

        db.collection("users").document()
                .set(name);
        return Result.success();
    }
}


كيفية ارسال data من activity الى workmanager


نقوم بعمل Data ونركز جيدا اننا اخترنا النوع work وهنا نرسل البيانات ببساطة ارسلنا ahmed mahmoud الى key باسم name بعدها قمنا بعمل constraints وهي المسؤوله عن عمل WorkRequest بالنسبة للامر setRequiresDeviceIdle فهو يخبره انه يعمل عندما يكون الهاتف في وضع السكون او مغلق يمكنك عملها false ليعمل والتطبيق مفتوح , وبعدها OneTimeWorkRequest ونخبره انه يعمل على MyWorkManager ونرسل لها data و constraints وانه يعمل في ونضيف له addTag وهذة المسؤوله عن التشغيل وعمل id للWork , وفي النهايه نقوم بعمل enqueue لتغشيل الكود السابق وايضا نعمل UUID للحصول على id الخاص بالعملية التي تعمل وقمنا بعمل لها observe لكي نراقب الحاله التي تحصل بها ونطبعها في log والان جرب ان تقوم بعمل run وشاهد النتيجة .


كيفية ارسال data من activity الى workmanager

MainActivity.class


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    Constraints constraints;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Data data = new Data.Builder()
                .putString("name", "ahmed mahmoud")
                .build();

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
             constraints = new Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .setRequiresDeviceIdle(true)
                    .build();
        } else {
            constraints = new Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build();
        }

        OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(MyWorkManager.class)
                .setInputData(data)
//                .setConstraints(constraints)
                .addTag("My workManager upload")
                .build();

        // start work manager
        WorkManager.getInstance(this).enqueue(oneTimeWorkRequest);

        // stop work manager by id
        UUID uuid = oneTimeWorkRequest.getId();

        // info work manager
        WorkManager.getInstance(this).getWorkInfoByIdLiveData(uuid).observe(this, new Observer<WorkInfo>() {
            @Override
            public void onChanged(WorkInfo workInfo) {
                if (workInfo !=null && workInfo.getState().isFinished()) {
                    Log.i(TAG, "onChanged: success");
                }
            }
        });
    }
}


تعديل في كلاس الورك لعرض تفاصيل العملية التي تحصل خلال التغشيل واذا نجحت يرسل لنا عبارة MyWorkManager firebase في log لكي نعرف


شرح بناء الworkmanager وارسال Data من activity الى workmanager اندرويد ستوديو


    @NonNull
    @Override
    public Result doWork() {
        String name = getInputData().getString("name");
        String web = getInputData().getString("name");
        Map<String, Object> user = new HashMap<>();
        user.put("name", name);
        user.put("web", web);

        db.collection("users").document().set(name)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Log.i(TAG, "onComplete: MyWorkManager firebase ");
                    }
                });

        return Result.success();
    }



اذا لم يعمل الكود انتقل الى manifest وقم باضافة permission في الثلاث اسطر التالية اسفل اسم package


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


الخلاصة :


الwork manager عباره عن class يعمل في الخلفيه لتنفيذ وظيفة معينه

يمكنك ارسال data من class الى work manager 

تحتاج الى 4 خطوات رئيسية لارسال البيانات وهي Data و Constraints و OneTimeWorkRequest و enqueue لتشغيل الwork


لمزيد من الاكواد والشروحات في برنامج اندرويد ستوديو يمكنك مشاهدة احد المقالات التالية 


تعليقات