2012-12-06 9 views
10

Webserivce'den tarihler ve zaman biçiminde veri alıyorum, belirli bir tarihte bir dizi yuvaya sahibim. Aşağıdaki şemada detaylı açıklama verilmektedir. enter image description hereUygulama kapatıldığında Android bildirimleri nasıl edinilir?

Her tarihte bazı zamanlama ayarlamam var. Burada istediğim, belirli bir tarih ve saatte bildirimi görüntülemek. Veritabanından gelen cevap 07/12/2012 saat 11: 00'de yarınki tarihlerden oluşur. O sırada bildirim göstermem gerekiyor.

ben bildirim yöneticisi ve ben kullanıyorum kod olduğu konusunda bir fikir ..

Main.java

 NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_action_search, "A New Message!", System.currentTimeMillis()); 

    Intent notificationIntent = new Intent(this, Main.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

    notification.setLatestEventInfo(Main.this, notificationTitle, notificationMessage, pendingIntent); 
    notificationManager.notify(10001, notification); 

sahip Ama burada ben uygulama aynı zamanda kapatıldığında bildirimleri almak gerekir. Yani, herkes bana bununla yardımcı oluyor.

+0

Bu görevi gerçekleştirmek için servise yazabilirsiniz: -http: //www.vogella.com/articles/AndroidServices/article.html –

cevap

14

Uygulamanıza bir (başlatılmış) Service ekleyin. Kullanıcı uygulamanızı sonlandırmasına rağmen, hizmet arka planda çalışmaya devam eder.

Ayrıca, telefonun Hedeflerini dinleyecek ve telefon açıldığında hizmetinizin başlatılmasına izin veren bir BroadcastReceiver uygulayabilirsiniz!

MyService.java

public class MyService extends Service { 

@Override 
public int onStartCommand(Intent intent, int flags, int startId){ 
    // START YOUR TASKS 
return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    // STOP YOUR TASKS 
super.onDestroy(); 
} 

@Override 
public IBinder onBind(Intent intent){ 
    return null; 
} 

BootReceiver.java

public class BootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      Intent serviceIntent = new Intent("your.package.MyService"); 
      context.startService(serviceIntent); 
      } 
     } 
    } 
} 

AndroidManifest.xml

// tezahür etiketi

yılında Veriler daha sonra iyi olabilir GCM kullanan sunucunuzdan gelirse
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

// Başvurunuz etiketinde

<service android:name=".MyService"> 
    <intent-filter> 
     <action android:name="your.package.MyService" /> 
    </intent-filter> 
</service> 

<receiver 
    android:name=".BootReceiver" 
    android:enabled="true" 
    android:exported="true" 
    android:label="BootReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

bir etkinliğe adresinin hizmetini başlatmak istiyorsanız, sadece

private boolean isMyServiceRunning() { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (MyService.class.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 

if (!isMyServiceRunning()){ 
    Intent serviceIntent = new Intent("your.package.MyService"); 
    context.startService(serviceIntent); 
} 
+0

Yanıtladığınız için teşekkür ederiz. Herhangi bir örnek kodla bana yardım edebilir misin? Ben android geliştirmeye yeni olarak cevabınızla ilgili kodu bulamıyorum. –

+0

Düzenlendi. Görev içinde ne yapılacağı söz konusu olduğunda, AlarmManager, ScheduledExecutorService, vb. Kullanabilirsiniz. Android.developer veya global Java dokümanlarına olayların belirli zamanları gösterme yollarıyla ilgili olarak bakmalısınız. – PeterGriffin

5

kullanmak yaklaşım. Bu durumda sunucu uygulamanızı uyandırma/başlatma yeteneğine sahip olacaktır.

Sizin durumunuzda sürekli olarak çalışan bir hizmet oluşturmak, berbat bir çözümdür. IMO daha iyi bir yaklaşım AlarmManager kullanımıdır. Alarm yöneticisi belirli bir zamanda niyetini belirleyecektir. (Telefon yeniden başlatırsa, tekrar kayıt yaptırmanız gerektiğini unutmayın).