kaka2020
-
المساهمات
3 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة kaka2020
-
-
ممكن مساعد في طريقة ضبط أكثر من منبه في اليوم وكل منبه يحمل إشعار معين للمستخدم هل يتم استخدام service او broadcast او الاثنين معا برجاء المساعدة
-
بتاريخ 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>
بعد ذلك جرب التطبيق على جهازك وستجده يعمل بدون مشاكل.
شكرا أخي بصراحه شرح أكثر من رائع ولكن لدي استفسار هو اذا كان لدي برنامج بها اكثر من كلاس حيث أحتاج عمل اكثر من اشعار في اليوم مثلا وقت الظهر . وقت المغرب . وقت الفجر وهكذا وكل اشعار يحتوي علي نص معين، فكيف افعل ذلك؟
كيفية ضبط أكثر من منبه بأوقات مختلفة بالاندرويد استديو؟
في أسئلة البرمجة
نشر
اشكرك اخي الكريم علي مساعدتك لي ولكن انا ارغب بظبط المنبه بتوقيتين مختلفين وكل منبه يعطي اشعار ويكون التنبيه يوميا لكون شاكر مره تانيه لو ساعدتني