2013-05-10 19 views
12

Próbowałem stworzyć Powiadamianie z tego kodu:Stwórz powiadomienie z 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()); 
    } 
} 

I tutaj moje deklaracji Mainfest:

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

Mój problem jest teraz, że alarm jest generowany, ale Powiadamianie nie jest wyświetlane. Program BroadcastReceiver jest zadeklarowany w pliku mainfest i nie ma błędów kompilatora ani środowiska wykonawczego.

Moim drugim problemem jest to, że setLatestEventInfo i new Notification Contructor są przestarzałe. Co mogę użyć zamiast tego?

Odpowiedz

9

Myślę, że trzeba użyć

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

zamiast getService

+0

okay dzięki za że. Zaktualizowałem mój Kod powyżej. W tej chwili nic się nie dzieje ... – Cilenco

+1

BroadcastReceivers generalnie działają na niektóre działania. Zdefiniuj akcję, z którą będzie działać twój nadajnik-odbiornik, a następnie dodaj tę akcję do manifestu i intencji. Więcej szczegółów [tutaj] (http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html) –

3

użyć Notification.Builder zbudować powiadomienie teraz i czeka zamiar musi być PendingIntent.getBroadcast()

6

można użyć

Intent switchIntent = new Intent(BROADCAST_ACTION);

zamiast korzystania

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

tu BROADCAST_ACTION jest działanie, które są definiowane w jawnym

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

można złapać go za pomocą tej nazwy działania

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 
     } 
}} 
Powiązane problemy