23

Ich habe custom notification gemacht und es gibt eine Schaltfläche in diesem, ich möchte zwei verschiedene functionalities on notification and button click durchführen. Ich sehe mir viele Links an, konnte aber keinen Weg finden, um den Listener hinzuzufügen.Hinzufügen von Schaltflächenaktion in benutzerdefinierten Benachrichtigung

Kann jemand helfen. Hier ist mein Code. Danke vielmals.

private void startNotification() { 
    Intent intent; 
    PendingIntent pIntent; 
    RemoteViews remoteViews = new RemoteViews(getPackageName(), 
      R.layout.mynotification); 

    Context context = getApplicationContext(); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
      this).setSmallIcon(R.drawable.ic_launcher).setContent(
      remoteViews); 

    if (hasFlash) { 
     intent = new Intent(context, FlashLight.class); 
     pIntent = PendingIntent.getActivity(context, 1, intent, 0); 
    } else { 
     intent = new Intent(context, BlankWhiteActivity.class); 
     pIntent = PendingIntent.getActivity(context, 1, intent, 0); 
    } 
    builder.setContentIntent(pIntent); 
    NotificationManager mNotificationManager = (NotificationManager)  getSystemService(Context.NOTIFICATION_SERVICE); 

    Notification notif = builder.setContentTitle("Flashlight") 
      .setContentText("Lighten your world!!!").build(); 
    mNotificationManager.notify(1, notif); 

    remoteViews.setOnClickPendingIntent(R.id.closeOnFlash, pIntent); 

} 

Ich habe den Knopf ID übergeben (closeOnFlash) in setOnClickPendingIntent weiß nicht, warum seine nicht funktioniert.

Und hier ist mein xml:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center" 
android:orientation="horizontal" 
android:weightSum="100" > 

<ImageView 
    android:id="@+id/notifiation_image" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="30" 
    android:contentDescription="@string/appImage" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/appName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="50" 
    android:gravity="center" 
    android:text="@string/flashLightOn" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<Button 
    android:id="@+id/closeOnFlash" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="20" 
    android:text="@string/close" /> 

+2

Mai dieses Thema sein hilft? http://stackoverflow.com/questions/5479165/event-onclick-for-a-button-in-a-custom-notification – user1406716

+1

Dieser Thread sollte beantworten, was Sie versuchen zu tun: http://stackoverflow.com/questions/12438209/handling-buttons-inside-android-benachrichtigungen – user1406716

+0

Ok vielen Dank, ich werde es einen Blick geben. –

Antwort

40

Das ist für mich gearbeitet:

private void startNotification(){ 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(ns); 

    Notification notification = new Notification(R.drawable.ic_launcher, null, 
      System.currentTimeMillis()); 

    RemoteViews notificationView = new RemoteViews(getPackageName(), 
      R.layout.mynotification); 

    //the intent that is started when the notification is clicked (works) 
    Intent notificationIntent = new Intent(this, FlashLight.class); 
    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, 
      notificationIntent, 0); 

    notification.contentView = notificationView; 
    notification.contentIntent = pendingNotificationIntent; 
    notification.flags |= Notification.FLAG_NO_CLEAR; 

    //this is the intent that is supposed to be called when the 
    //button is clicked 
    Intent switchIntent = new Intent(this, switchButtonListener.class); 
    PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0, 
      switchIntent, 0); 

    notificationView.setOnClickPendingIntent(R.id.closeOnFlash, 
      pendingSwitchIntent); 

    notificationManager.notify(1, notification); 
} 


public static class switchButtonListener extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("Here", "I am here"); 
     FlashOnOff flashLight; 
     flashLight = new FlashOnOff(); 
     flashLight.flashLightOff(); 
     flashLight.releaseCamera();   
    } 
} 

und meine xml:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center" 
android:orientation="horizontal" 
android:weightSum="100" > 

<ImageView 
    android:id="@+id/notifiation_image" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="30" 
    android:contentDescription="@string/appImage" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/appName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="50" 
    android:gravity="center" 
    android:text="@string/flashLightOn" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<Button 
    android:id="@+id/closeOnFlash" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="20" 
    android:text="@string/close" /> 

In manefest unter Tag Anwendung:

<receiver android:name="FlashLight$switchButtonListener" /> 
+0

@PoojaShah glücklich zu helfen :) –

+1

Wie funktioniert die Erklärung in Manifest? Ist FlashLight Ihre Klasse mit dem swiftButtonListener? Ist es der Name der Anwendung? –

+1

seine Aktivität Name –

Verwandte Themen