2016-05-06 8 views
0

In meiner Android-Anwendung möchte ich eine Benachrichtigung generieren, wenn die aktuelle Zeit mit der Zeit übereinstimmt, die ich aus meiner Datenbank abgerufen habe. Und die Benachrichtigung sollte auch dann generiert werden, wenn die Anwendung nicht ausgeführt wird. Dafür habe ich so etwas gemacht, aber das funktioniert nicht (es wird keine Benachrichtigung erzeugt). Ich bin neu bei Android, und ich habe viele Beispiele und Tutorials zur Lösung dieses Problems gesehen, aber sie haben nicht geholfen. Also bitte geben Sie Antwort, was soll ich tun, um das gewünschte Ergebnis zu bekommen?Benachrichtigung generieren, wenn die Zeit übereinstimmt, auch ohne Anwendung - ANDROID

In MainActivity.java Ich tue dies:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     /*here I am retrieving time from database*/ 
     String time_from_database = "20:00:00"; 
     if(Calendar.getInstance()==time_from_database) { 
      AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      Intent intent = new Intent(MainActivity.this, NotGen.class); 
      PendingIntent alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); 
      alarmMgr.set(AlarmManager.RTC, Calendar.getInstance(), alarmIntent); 
     } 
    } 
} 

dieser Code von NotGen.java Klasse:

public class NotGen extends BroadcastReceiver { 

    public NotificationCompat.Builder mBuilder; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     PendingIntent pIntent = PendingIntent.getActivity(context,0,intent,0); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); 
     mBuilder.setTicker("Ticker Title"); 
     mBuilder.setSmallIcon(R.drawable.my_img); 
     mBuilder.setContentTitle("Notification Alert, Click Me!"); 
     mBuilder.setContentText("Hi, This is Android Notification Detail!"); 
     mBuilder.setContentIntent(pIntent).getNotification(); 

     mBuilder.setAutoCancel(true); 
     mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL; 

     Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     mBuilder.setSound(alarmSound); 

     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(0,mBuilder.build()); 
    } 

} 
+0

Sie benötigen einen Service, wenn Sie Ihre Alarme wollen Neustarts, um zu überleben und/oder inaktiven App. –

Antwort

0

Calendar.getInstance()==time_from_database wird nie funktionieren.

Zuerst wird getInstance() eine neue Instanz erstellen, und == ist Objektidentitätsgleichheit.

Zweitens ist time_from_database ein String ("20:00:00"). Eine Calendar Instanz wird niemals gleich sein, wenn aus einem anderen Grund als Calendar eine Kombination aus Datum und Uhrzeit ist.

0

Sie können es mit Service erreichen. Der Dienst wird die ganze Zeit im Hintergrund ausgeführt, selbst wenn Ihre Anwendung nicht ausgeführt wird.

1) Erstellen Sie den Dienst und registrieren Sie ihn in der Manifest-Datei.

2) Starten Sie es beim Start der Anwendung.

3) In den Dienst können Sie Ihre Benachrichtigung generieren, wenn die aktuelle Uhrzeit mit der Datenbankzeit übereinstimmt.

Für Service Beispiel können Sie unter Links sehen

http://javatechig.com/android/android-service-example

http://www.tutorialspoint.com/android/android_services.htm

+0

Ich habe Ihre Anweisungen befolgt, aber jetzt wird 'BroadcastReceiver' nicht von' AndroidManifest.xml' aufgerufen. Lies meine Frage hier: http://stackoverflow.com/questions/37078403/broadcastreciever-ist-not-start-service-in-android –

Verwandte Themen