2013-05-10 16 views
12

Ich habe versucht, eine Mitteilung mit diesem Kodex zu erstellen:Meldung anlegen mit BroadcastReceiver

private void setNotificationAlarm(Context context) 
{ 
    Intent intent = new Intent(getApplicationContext() , MyNotification.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 , pendingIntent); 
    Log.d("ME", "Alarm started"); 
} 

public class MyNotification extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.d("ME", "Notification started"); 

     NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("My notification") 
      .setContentText("Hello World!"); 

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

Und hier meine Mainfest Erklärung:

<receiver 
    android:name=".MyNotification" 
    android:enabled="true" 
    android:exported="false" > 
</receiver> 

Mein Problem ist jetzt, dass der Alarm erzeugt wird, aber die Mitteilung wird nicht angezeigt. Der BroadcastReceiver wird in der Mainfest-Datei deklariert und es gibt keine Compiler- oder Laufzeitfehler.

Mein zweites Problem ist, dass setLatestEventInfo und new Notification Contructor veraltet sind. Was kann ich anstelle davon verwenden?

Antwort

9

Ich glaube, Sie

PendingIntent.getBroadcast (Context context, int requestCode, Intent intent, int flags) 

statt getService

+0

in Ordnung dank definieren für Das. Ich habe meinen obigen Code aktualisiert. Nichts passiert gerade ... – Cilenco

+1

BroadcastReceiver arbeiten im Allgemeinen an einer Aktion. Definieren Sie eine Aktion, mit der Ihr Broadcastempfänger arbeiten wird, und fügen Sie diese Aktion dem Manifest & in der Absicht hinzu. Mehr Details [hier] (http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html) –

3

Sie Notification.Builder verwenden müssen, verwenden Sie die Meldung nun zu bauen und die anstehende Absicht muss PendingIntent.getBroadcast()

6

Sie verwenden können, um sein

Intent switchIntent = new Intent(BROADCAST_ACTION);

statt

Intent intent = new Intent(getApplicationContext() , MyNotification.class);

hier BROADCAST_ACTION verwendet, ist Aktion, die Sie in einem offenkundigen

<receiver android:name=".MyNotification " android:enabled="true" > 
    <intent-filter> 
     <action android:name="your package.ANY_NAME" /> 
    </intent-filter> 
</receiver> 

Sie es unter Verwendung dieser Aktionsnamen fangen

public class MyNotification extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    String act = "your package.ANY_NAME"; 
     if(intent.getAction().equals(act)){ 

      //your code here 
     } 
}} 
Verwandte Themen