2016-07-26 11 views
1

Ich versuche, eine Benachrichtigung für meine App zu erstellen, die das übliche Symbol, den Titel und den Untertext, aber auch die Aktionsschaltfläche auf der rechten Seite enthält die Benachrichtigung, ohne in den großen Modus zu expandieren. Die Textzeilen sind immer kurz, so dass genügend Platz für die Schaltfläche vorhanden ist. Es sieht derzeit wie dieseAndroid-Benachrichtigungen - Aktionsschaltfläche bei normaler Ansichtsbenachrichtigung (ohne auf große Ansicht zu erweitern)

1

Aber wenn es zur normalen Ansicht durch eine andere Meldung komprimiert wird, sieht es so aus und verliert den Knopf

2

ich eine benutzerdefinierte Ansicht gemacht haben mit RemoteViews, aber das Problem dabei ist, dass ich die Positionen und Stile von Icon und Text nicht manuell einstellen muss. Es wäre viel zuverlässiger über mehrere Geräte hinweg, damit sich das System um sie kümmert.

Ist es möglich, nur meine eigene Schaltfläche auf der rechten Seite hinzuzufügen, wie die Benachrichtigung im zweiten Bild erscheint? So wie man ein Element einer Remote-Ansicht mit dem von Android generierten Standard-Layout kombiniert? Nach dem, was ich gelesen habe, glaube ich nicht, dass es möglich ist, den Aktionsschaltfläche in der normalen Ansicht zu verwenden?

Der Grund, warum ich dies tun möchte, ist, dem Benutzer zu ermöglichen, den Alarm anzutippen, um zu bestätigen, dass er ihn gesehen hat, damit er nicht erlischt, aber er hat immer noch die Benachrichtigung über das bevorstehende Ereignis. Wenn Sie auf eine andere Stelle als die Alarmschaltfläche klicken, sollte die App wie gewohnt geöffnet werden.

Codeweise sieht es so aus, mit den Fernansichten auskommentiert.

RemoteViews remoteViews = new RemoteViews(activity.getPackageName(), 
       R.layout.custom_notification); 

     String eventDescription = preferences.getString(activity.getResources().getString(R.string.next_event_description), "Freemasons run the country"); 
     String eventTime = preferences.getString(activity.getResources().getString(R.string.next_event_time), "00:00"); 

    NotificationManager notificationManager = (NotificationManager) 
    activity.getSystemService(activity.NOTIFICATION_SERVICE); 

    Intent intent = new Intent(activity, MainActivity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(activity, 0 , intent, 0); 

    Notification.Action action = new Notification.Action.Builder(
      Icon.createWithResource(activity, R.mipmap.alarm_icon), 
      nextEventAlarmMinutes.toString(), 
      pIntent).build(); 

    Notification.Builder builder = new Notification.Builder(activity) 
      //.setContent(remoteViews) 
      .setContentTitle(eventDescription) 
      .setContentText(eventTime) 
      .setSmallIcon(R.mipmap.alarm_icon) 
      .setContentIntent(pIntent) 
      .addAction(action) 
      //.setPriority(Notification.PRIORITY_HIGH) 
      .setWhen(0) 
      .setVisibility(Notification.VISIBILITY_PUBLIC) 
      .setAutoCancel(false); 

     notificationManager.notify(0, builder.build()); 

Die benutzerdefinierte Ansicht xml hat nur eine relative Layout und eine Schaltfläche

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:padding="10dp" /> 

Ist es möglich, dass das relative Layout ist das Ganze zu überschreiben, und ich kann nur die Taste verwenden, wie ein Blick auf sich selbst, ohne dass ein Elternteil es hält?

+0

einbetten Bild in Frage statt URL – Jas

+0

@ Matt können Sie bitte Teil des entsprechenden Code schreiben? – Leo

Antwort

0
//Share intent 
Intent shareAction = new Intent(this, ActShare.class); 
PendingIntent pendingIntentShare = PendingIntent.getActivity(this, 12345, shareAction, PendingIntent.FLAG_UPDATE_CURRENT); 
mBuilder.addAction(R.drawable.share, "Share", pendingIntentShare); 

//Editintent 
Intent EditAction = new Intent(this, ActEdit.class); 
PendingIntent pendingIntentEdit = PendingIntent.getActivity(this, 12345, EditAction, PendingIntent.FLAG_UPDATE_CURRENT); 
mBuilder.addAction(R.drawable.edit, "Edit", pendingIntentEdit); 

//Share intent 
Intent deleteAction = new Intent(this, ActDelete.class); 
PendingIntent pendingIntentDelete = PendingIntent.getActivity(this, 12345, deleteAction, PendingIntent.FLAG_UPDATE_CURRENT); 
mBuilder.addAction(R.drawable.delete, "Delete", pendingIntentDelete); 

Fügen Sie diesen Code addAction in Ihrem Standard-Android-Benachrichtigung ..

+0

Sorry ich sehe nicht, wie das die Frage überhaupt beantwortet? Wird dies nicht nur drei verschiedene Aktionen zur Benachrichtigung hinzufügen und immer noch erfordern, dass es sich im großen Modus befindet? – Matt