android Cómo abrir la última actividad al tocar notificación
He observado varias preguntas similares pero no pudieron ayudarme. Necesito mostrar la última actividad cuando el usuario hace clic en la notificación. Aquí está mi código:
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;
}
El segundo punto es que si utilicé métodos obsoletos para generar notificaciones, mostrar la última actividad funciona muy bien como quería aquí, es el código:
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's why i'm here explaining. Thanks in advance!
Y he vistoesta doc.
Aquí está mi manifiesto:
<?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_TA,SKS"/>
<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>
<!--android:process=":remote" is for working in background-->
<service android:enabled="true" android:name=".service.YourService"/>
</application>