2016-06-27 21 views
2

ich meine Logik in Android Hintergrunddienst geputtet, die auf onClick Wirkung meiner klebrigen notification.Everything starten arbeiten gut, aber Probleme sind: -Android-Benachrichtigung funktioniert nicht für einzelne Klick-/Tap auf dem Sperrbildschirm

  1. Wenn ich mein Telefon sperre und versuche, auf die Benachrichtigung zu klicken/tippen, muss es immer doppelt geklickt/geklopft werden.
  2. Meine Logik ist im Hintergrund Service, aber nach dem Einschalten Meldung Hintergrunddienst geklickt wird nicht gestartet, bis mein Handy entsperrt ist. (Hintergrund-Service ist klebrig)

Below-Code für erzeugt eine klebrige Benachrichtigung verwendet wird.

private void Notify() { 
    Context objContext = this.cordova.getActivity(); 
    Intent objIntent = new Intent(objContext, ApiCallServeice.class); 
    PendingIntent pi = PendingIntent.getService(objContext, intNotificationId, objIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

    Notification.Builder builder = new Notification.Builder(objContext); 
    builder.setContentTitle("Click to get help."); 
    builder.setAutoCancel(false); 
    builder.setSmallIcon(objContext.getApplicationInfo().icon); 
    builder.setOngoing(true); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     builder.setVisibility(Notification.VISIBILITY_PUBLIC); 
    } 
    builder.setContentIntent(pi); 
    builder.build(); 

    myNotication = builder.getNotification(); 
    manager.notify(intNotificationId, myNotication); 
} 

Bitte schlagen Sie mir die Lösung vor oder müssen Sie ein Flag in meinem Code setzen.

Antwort

1

Für Klick auf Benachrichtigung UI everwhere.We bekommen müssen die Remote-Ansicht verwenden, in dem Sie auf die Schaltfläche Overlay auf ganze Layout setzen und schreiben können Zuhörer klicken Sie auf diese Schaltfläche

Unten ist der Update-Code Ich bin es gewohnt: -

private void Notify() { 
    Context objContext=this.cordova.getActivity(); 
    Intent objIntent = new Intent(objContext, ApiCallServeice.class); 
    PendingIntent pi = PendingIntent.getService(objContext, intNotificationId, objIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
    RemoteViews objRemoteViews = new RemoteViews(objContext.getApplicationContext().getPackageName(), R.layout.your_notification_layout); 
    objRemoteViews.setOnClickPendingIntent(R.id.your_notification_clickable_button, pi); 

    Notification.Builder builder = new Notification.Builder(objContext); 
    builder.setAutoCancel(false); 
    builder.setSmallIcon(objContext.getApplicationInfo().icon); 
    objRemoteViews.setImageViewResource(R.id.img_icon, objContext.getApplicationInfo().icon); 
    builder.setOngoing(true); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     builder.setVisibility(Notification.VISIBILITY_PUBLIC); 
    } 
    builder.setContent(objRemoteViews); 
    builder.build(); 

    myNotication = builder.getNotification(); 
    manager.notify(intNotificationId, myNotication); 
}