I observed several similar questions, but they could not help me. I need to display the last activity when I click on a user notification. Here is my code:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(YourService.this) .setContentTitle(getResources().getText(R.string.app_name)) .setContentText(getServiceStateDescription(YourService.this)) .setSmallIcon(iconId) .setWhen(System.currentTimeMillis()); Intent nIntent = getPreviousIntent(); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack stackBuilder.addParentStack(MainActivity_.class); stackBuilder.addNextIntent(nIntent); PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); notificationBuilder.setContentIntent(pendingIntent); startForeground(ContextConstants.LAUNCHER_SERVICE_NOTE_ID, notificationBuilder.build()); private Intent getPreviousIntent() { Intent newIntent = null; final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { final List<ActivityManager.AppTask> recentTaskInfos = activityManager.getAppTasks(); if (!recentTaskInfos.isEmpty()) { for (ActivityManager.AppTask appTaskTaskInfo: recentTaskInfos) { if (appTaskTaskInfo.getTaskInfo().baseIntent.getComponent().getPackageName().equals(ContextConstants.PACKAGE_NAME)) { newIntent = appTaskTaskInfo.getTaskInfo().baseIntent; newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } } } } else { final List<ActivityManager.RecentTaskInfo> recentTaskInfos = activityManager.getRecentTasks(1024, 0); if (!recentTaskInfos.isEmpty()) { for (ActivityManager.RecentTaskInfo recentTaskInfo: recentTaskInfos) { if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(ContextConstants.PACKAGE_NAME)) { newIntent = recentTaskInfo.baseIntent; newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } } } } if (newIntent == null) newIntent = new Intent(); return newIntent;
}
The second point is that if I used outdated methods to create notifications, displaying the last action works just fine, as I wanted here, this is the code:
Notification note = new Notification(iconId, getResources().getText(R.string.serviceStarted), System.currentTimeMillis()); note.flags |= Notification.FLAG_ONGOING_EVENT; note.flags |= Notification.FLAG_NO_CLEAR; Intent nIntent = new Intent(); nIntent = getPreviousIntent(nIntent); PendingIntent pi = PendingIntent.getActivity(this, 0, nIntent, 0); note.setLatestEventInfo(this, getResources().getText(R.string.app_name), getServiceStateDescription(YourService.this), pi); startForeground(ContextConstants.LAUNCHER_SERVICE_NOTE_ID, note);
But i don't want use deprecated metods anymore, that why i'm here explaining. Thanks in advance!
And I saw this document.
Here is my manifest:
<?xml version="1.0" encoding="utf-8"?>
<permission android:name="com.my.package.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="com.my.package.permission.C2D_MESSAGE" /> <uses-permission android:name="android.permission.GET_TASKS"/> <application android:name=".MyApplication" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.Light"> <activity android:name=".activity.StartingActivity_" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".activity.MainActivity_" android:configChanges="orientation|screenSize"> </activity> <activity android:name=".activity.ComposeEmailActivity_" android:configChanges="orientation|screenSize" android:parentActivityName=".activity.MainActivity_"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.MainActivity_" /> </activity> <activity android:name=".activity.EditAccountActivity_" android:configChanges="orientation|screenSize" android:parentActivityName=".activity.MainActivity_"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.MainActivity_" /> </activity> <service android:enabled="true" android:name=".service.YourService"/> </application>
android notifications android-pendingintent
nAkhmedov
source share