تصميم برنامج باستخدام برنامج اندرويد ستوديو لارسال الاشعارات في وقت محدد | AlarmManager android studio

تصميم برنامج باستخدام برنامج اندرويد ستوديو لارسال الاشعارات في وقت محدد | AlarmManager android studio


تصميم برنامج باستخدام برنامج اندرويد ستوديو لارسال الاشعارات في وقت محدد | AlarmManager android studio

في هذا المقال سوف نشرح لكم كيفية عمل AlarmManager  وارسال اشعارات للمستخدم بوقت محدد في الاندرويد ستوديو , اذا كنت تريد عمل منبة للوقت او حتى تريد ارسال اشعار معين للمستخدم يوميا في وقت معين فالحل الذي يمكنك القيام به هو AlarmManager  ويوجد طرق اخرى للتعامل معه ولكن في هذا الدرس سوف نشرح لكم طريقة بسيطة جدا لارسال اشعارات مخصصه للمستخدمين في الاندرويد ستوديو بكل سهوله من اجل تحسين تطوير تطبيقات الاندرويد الخاصه بك .


Android Studio هو IDE الرسمي لبرمجة Android ويأتي مع كل ما تحتاجه للبدء.

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


محلل لملفات APK

افحص محتويات ملف APK للتطبيق الخاص بك لمعرفة طرق تقليل حجم تطبيق Android ، حتى لو لم يتم إنشاؤه باستخدام Android Studio. افحص ملف البيان ، بالإضافة إلى الموارد وملفات DEX. قارن بين ملفي APK لملاحظة كيفية تطور حجم التطبيق بمرور الوقت.


ارسال اشعارات في الخلفيه حتى لو التطبيق مغلق

اولا عليك ان تقوم بعمل class من AlarmReceiver ويكون من نوع BroadcastReceiver  وبعدها انسخ الكود التالي وضعه بداخله وهو كود الاشعارات يمكنك القيام باي عملية في التطبيق ليس فقط الاشعارات فهنا يتم كتابة الكود الذي سوف يتم تنفيذه في وقت معين .


ارسال اشعارات في الخلفيه حتى لو التطبيق مغلق

AlarmReceiver.class



public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        
        // you can change TasteActivity.class for any activity ( this's intent for click notification )	
        Intent i = new Intent(context, TestActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        String text = intent.getStringExtra("name");
        PendingIntent pendingIntent = PendingIntent.getActivity(context,0,i,0);



        NotificationCompat.Builder builder = new NotificationCompat.Builder(context , "alarm1")
                .setSmallIcon(R.drawable.ic_smile)
                .setContentTitle("Alarm Manager")
                .setContentText(text)
                .setAutoCancel(true)
                .setDefaults(NotificationCompat.DEFAULT_ALL)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setContentIntent(pendingIntent);

        NotificationManagerCompat notificationManagerCompat=
        NotificationManagerCompat.from(context);
      
        notificationManagerCompat.notify(123 , builder.build());

    }
}


تفعيل الreceiver داخل الmanifest

الخطوة التاليه ويها تفعيل الreceiver في الmanifest لكي يتم التعامل مع الاشعارات والعمليات التي تحدث في الAlarmReceiver حتى في حالة عدم تشغيل التطبيق .


تفعيل الreceiver داخل الmanifest

manifest.xml


    <application
	<intent-filter>
		....
            </intent-filter>
        </activity>
        <receiver android:name=".alaram.AlarmReceiver"/>
    </application>

</manifest>



تصميم واجهه لتحديد وقت ارسال الاشعارات

الان سوف نقوم بتصميم واجهة بسيطة عباره عن زر لضبط المنبة وزر لتشغيله والاخير لاغلاق التشغيل .


google console play console android android studio mac android studio krita android



تصميم واجهه لتحديد وقت ارسال الاشعارات

test_activity.xml


<LinearLayout
        android:background="@color/primary"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".TestActivity">

        <TextView
            android:id="@+id/set_time"
            android:textColor="@color/white"
            android:textSize="32sp"
            android:layout_gravity="center"
            android:text="9:00 PM"
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_select_time"
            android:text="Select time"
            android:textAllCaps="false"
            android:layout_marginTop="20dp"
            android:layout_marginHorizontal="25dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_set_alarm"
            android:text="Set Alarm "
            android:textAllCaps="false"
            android:layout_marginTop="20dp"
            android:layout_marginHorizontal="25dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_cancel_alarm"
            android:text="Cancel Alarm"
            android:textAllCaps="false"
            android:layout_marginTop="20dp"
            android:layout_marginHorizontal="25dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
    


كود تحديد وقت لارسال الاشعارات وايقاف تشغيل الاشعارات اندرويد

الان سوف نقوم بكتابة الكود الخاص بتفعيل اختيار الوقت وبعدها سوف نقوم بحفظ القيمة الخاصه به داخل الCalendar وبعدها نقوم بتفعيل الاشعارات عن طريق اخذ قيمة Calendar  وتفعيلها . وعند الاغلاق سوف نقوم بحذف القيمة الموجوده بداخل الCalendar  لكي يتم قفل الاشعارات وعدم تنفيذها .


كود تحديد وقت لارسال الاشعارات وايقاف تشغيل الاشعارات اندرويد

TestActivity.class


public class TestActivity extends AppCompatActivity {
    ActivityTestBinding binding;
    MaterialTimePicker timePicker;
    AlarmManager alarmManager;
    Calendar calendar;
    PendingIntent pendingIntent;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding= DataBindingUtil.setContentView(this,R.layout.activity_test);

        createNotificationChannel();

        binding.btnSelectTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showTimePicker();
            }
        });

        binding.btnSetAlarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setAlarm();
            }
        });

        binding.btnCancelAlarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cancelAlarm();
            }
        });
    }

    private void cancelAlarm() {
        Intent intent = new Intent(this, AlarmReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(this,0,intent,0);
        if (alarmManager == null) {
            alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        }
        alarmManager.cancel(pendingIntent);
        Toast.makeText(this, "cancel Alarm", Toast.LENGTH_SHORT).show();
    }

    private void setAlarm() {
        alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, AlarmReceiver.class);
      	// enter any message ######
        intent.putExtra("name", "##########");
        pendingIntent = PendingIntent.getBroadcast(this,0,intent,0);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY,pendingIntent);

        Toast.makeText(this, "Alarm set Success", Toast.LENGTH_SHORT).show();

    }

    private void showTimePicker() {
        timePicker = new MaterialTimePicker.Builder()
                .setTimeFormat(TimeFormat.CLOCK_12H)
                .setHour(12)
                .setMinute(0)
                .setTitleText("select Alarm Time")
                .build();
        timePicker.show(getSupportFragmentManager(),"alarm");
        timePicker.addOnPositiveButtonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (timePicker.getHour() > 12){
                    binding.setTime.setText((timePicker.getHour()-12) +" : " + timePicker.getMinute() + " PM");

                } else {
                    binding.setTime.setText(timePicker.getHour()+" : "+timePicker.getMinute() + " AM");
                }
                calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY,timePicker.getHour());
                calendar.set(Calendar.MINUTE,timePicker.getMinute());
                calendar.set(Calendar.SECOND,0);
                calendar.set(Calendar.MILLISECOND,0);

            }
        });
    }

    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = "ReminderChannel";
            String description = "Channel for Alarm Manager";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel channel = new NotificationChannel("alarm1",name,importance);
            channel.setDescription(description);
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);

        }
    }
}


لمزيد من المقالات في الاندرويد :

تعليقات