TheBrain نشر 16 يونيو 2016 أرسل تقرير نشر 16 يونيو 2016 أريد برمجة تطبيق يرسل اشعار معين في وقت معين، فكيف أستطيع برمجة ذلك؟ لأنني حاولت عدة مرات وأجد أن الاشعارات تتداخل وتظهر في نفس الوقت. اقتباس
0 هشام رزق الله نشر 16 يونيو 2016 أرسل تقرير نشر 16 يونيو 2016 توجد عدة طرق لفعل ذلك، مثل استخدام أصناف AlarmManager وBroadcastReceiver في البرمجة. بعد إنشاء مشروع جديد سنضيف هذه الشيفرات البرمجية إلى MainActivity.java، قم بتعديل وقت وتاريخ عرض الاشعار كما تريد: package com.example; import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; public class MainActivity extends Activity { private PendingIntent pendingIntent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, 6); calendar.set(Calendar.YEAR, 2013); calendar.set(Calendar.DAY_OF_MONTH, 13); calendar.set(Calendar.HOUR_OF_DAY, 20); calendar.set(Calendar.MINUTE, 48); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.AM_PM,Calendar.PM); Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); } //end onCreate } سنحتاج أيضا إلى إنشاء BroadcastReceiver باسم MyReceiver.java وسيحتوي على الشيفرة البرمجية التالية: package com.example; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent service1 = new Intent(context, MyAlarmService.class); context.startService(service1); } } بعد ذلك سنحتاج إلى إنشاء "خدمة" Service لنضمن عمل البرنامج لعرض الاشعار في الوقت المناسب دون مقاطعة عمل المستخدم (التطبيق سيعمل في الخلفية): package com.example; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyAlarmService extends Service { private NotificationManager mManager; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @SuppressWarnings("static-access") @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE); Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class); Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis()); intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingNotificationIntent = PendingIntent.getActivity( this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.setLatestEventInfo(this.getApplicationContext(), "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent); mManager.notify(0, notification); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } } سنحتاج في النهاية إلى تحديث AndroidManifest.xml ليتضمن Service وReceiver مع الصلاحيات المناسبة: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.NextActivity" android:label="Next Screen"> </activity> <service android:name=".MyAlarmService" android:enabled="true" /> <receiver android:name=".MyReceiver"/> </application> بعد ذلك جرب التطبيق على جهازك وستجده يعمل بدون مشاكل. 1 اقتباس
0 kaka2020 نشر 16 يونيو 2016 أرسل تقرير نشر 16 يونيو 2016 بتاريخ On 6/16/2016 at 17:09 قال هشام رزق الله: توجد عدة طرق لفعل ذلك، لكن أعتقد أن أسهل طريقة هي عن طريق استخدام أصناف AlarmManager وBroadcastReceiver في البرمجة. بعد إنشاء مشروع جديد سنضيف هذه الشيفرات البرمجية إلى MainActivity.java، قم بتعديل وقت وتاريخ عرض الاشعار كما تريد: package com.example; import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; public class MainActivity extends Activity { private PendingIntent pendingIntent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, 6); calendar.set(Calendar.YEAR, 2013); calendar.set(Calendar.DAY_OF_MONTH, 13); calendar.set(Calendar.HOUR_OF_DAY, 20); calendar.set(Calendar.MINUTE, 48); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.AM_PM,Calendar.PM); Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); } //end onCreate } سنحتاج أيضا إلى إنشاء BroadcastReceiver باسم MyReceiver.java وسيحتوي على الشيفرة البرمجية التالية: package com.example; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent service1 = new Intent(context, MyAlarmService.class); context.startService(service1); } } بعد ذلك سنحتاج إلى إنشاء "خدمة" Service حيث سنضمن اشغال البرنامج لعرض الاشعار في الوقت المناسب دون مقاطعة عمل المستخدم (التطبيق سيعمل في الخلفية): package com.example; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyAlarmService extends Service { private NotificationManager mManager; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @SuppressWarnings("static-access") @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE); Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class); Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis()); intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingNotificationIntent = PendingIntent.getActivity( this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.setLatestEventInfo(this.getApplicationContext(), "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent); mManager.notify(0, notification); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } } سنحتاج في النهاية إلى تحديث AndroidManifest.xml ليتضمن Service وReceiver مع الصلاحيات المناسبة: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.NextActivity" android:label="Next Screen"> </activity> <service android:name=".MyAlarmService" android:enabled="true" /> <receiver android:name=".MyReceiver"/> </application> بعد ذلك جرب التطبيق على جهازك وستجده يعمل بدون مشاكل. شكرا أخي بصراحه شرح أكثر من رائع ولكن لدي استفسار هو اذا كان لدي برنامج بها اكثر من كلاس حيث أحتاج عمل اكثر من اشعار في اليوم مثلا وقت الظهر . وقت المغرب . وقت الفجر وهكذا وكل اشعار يحتوي علي نص معين، فكيف افعل ذلك؟ اقتباس
السؤال
TheBrain
أريد برمجة تطبيق يرسل اشعار معين في وقت معين، فكيف أستطيع برمجة ذلك؟ لأنني حاولت عدة مرات وأجد أن الاشعارات تتداخل وتظهر في نفس الوقت.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.