• 0

كيف أستطيع وضع اشعار في وقت معين في أندرويد؟

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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

توجد عدة طرق لفعل ذلك، مثل استخدام أصناف  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
بتاريخ 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>

بعد ذلك جرب التطبيق على جهازك وستجده يعمل بدون مشاكل.

شكرا أخي بصراحه شرح أكثر من رائع ولكن لدي استفسار هو اذا كان لدي برنامج بها اكثر من كلاس حيث أحتاج عمل اكثر من اشعار في اليوم مثلا وقت الظهر . وقت المغرب . وقت الفجر وهكذا وكل اشعار يحتوي علي نص معين، فكيف افعل ذلك؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن