5

In Android 4.4.2 Klicken auf meine Foreground Service Benachrichtigung tötet meinen Prozess.Der Vordergrunddienst wird bei Benachrichtigung beendet Klicken Sie auf

Auf älteren Geräten (Samsuing Tab 2 mit 4.2.2) kann ich die Aktivität aus den letzten Aufgaben wegwischen und meine Service läuft immer noch gut im Hintergrund. Dann, wenn ich auf die Notification klicke, startet meine App Activity wieder ganz glücklich.

Sobald ich aber auf die Benachrichtigung auf meinem Nexus 7 unter 4.4.2 klicke, wird mein Prozess beendet (was bis zum Klick glücklich im Hintergrund läuft). Die PendingIntent scheint gar nicht zu feuern, oder zumindest ist es nicht die erste Zeile der BroadcastReceiver getroffen:

05-21 16:17:38.939: I/ActivityManager(522): Killing 2268:com.test.student/u0a242 (adj 0): remove task 

Ich habe durchlaufen this Antwort, und mit dem Befehl dumpsys activity proccesses Ich habe bestätigt, dass mein Dienst ist läuft im Vordergrund korrekt.

Also, was ist das Klicken auf diese Benachrichtigung, die meinen Prozess tötet?

-Code bei der Bewegung des Service in den Vordergrund beteiligt folgt:

Service:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("NativeWrappingService", "Starting Service..."); 
    startForeground(NotificationIcon.NOTIFICATION_STUDENT, NotificationManager.getStudentIcon(this).getNotification());  
    return super.onStartCommand(intent, flags, startId); 
} 

NotificationIcon: (getStudentIcon(this).getNotification())

public Notification getNotification() { 
    Builder mBuilder = new Builder(mContext); 

    if(mSmallIcon != -1)  mBuilder.setSmallIcon(mSmallIcon); 
    if(mLargeIcon != null) mBuilder.setLargeIcon(mLargeIcon); 
    if(mTitle  != null) mBuilder.setContentTitle(mTitle); 
    if(mSubTitle != null) mBuilder.setContentText(mSubTitle); 
    if(mSubTitleExtra != null) mBuilder.setContentInfo(mSubTitleExtra); 

    mBuilder.setOngoing(mOngoing); 
    mBuilder.setAutoCancel(mAutoCancel); 
    mBuilder.setContentIntent(getPendingIntent(mContext, mAction, mBundle, mActivity)); 

    return mBuilder.build(); 
} 

private PendingIntent getPendingIntent(Context context, String action, Bundle extras, String activity) { 
    Intent newIntent = new Intent(context, BroadcastToOrderedBroadcast.class); 
    Bundle bundle; 
    if(extras != null) bundle = extras; 
    else    bundle = new Bundle(); 

    if(activity != null && !activity.equalsIgnoreCase("")) { 
     BundleUtils.addActivityToBundle(bundle, activity); 
    } 

    BundleUtils.addActionToBundle(bundle, action); 

    newIntent.putExtras(bundle); 

    return PendingIntent.getBroadcast(NativeService.getInstance(), mNotificationID, newIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
} 
+0

Es ist ein bekannter Fehler, der [hier] verfolgt wird (https://code.google.com/p/android/issues/detail?id=53313). Können Sie die in [Kommentar # 7] (https://code.google.com/p/android/issues/detail?id=53313#c7) aufgelistete Lösung ausprobieren? –

Antwort

4

FLAG_RECEIVER_FOREGROUND Flagge auf der PendingIntent von Ihrer Benachrichtigung verwendet hinzufügen damit der Dienst mit Vordergrundpriorität ausgeführt werden kann.

Intent newIntent = new Intent(context, BroadcastToOrderedBroadcast.class); 
newIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 
return PendingIntent.getBroadcast(NativeService.getInstance(), mNotificationID, newIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Hier ist die Quelle dieser Information: Android Issue Tracker tool.

+0

Entspricht es nicht FLAG_ACTIVITY_NEW_TASK? Sie beide sind 0x10000000, können Sie die Referenz unterstützen, die ich FLAG_RECEIVER_FOREGROUND überhaupt einstellen kann? –

+0

@Manish Mulimani Ich ging durch Ihren Vorschlag. Wenn meine App geschlossen ist und ich auf die Benachrichtigung klicke, wird mein Dienst neu gestartet. Und der BroadCast-Empfänger funktioniert auch nicht? –

Verwandte Themen