Android – Intent gerenciair. A intenção antiga é reenviair se o aplicativo aberto do user do gerenciador de tairefas

Eu tenho um problema. Quando eu chamo a atividade do método finish() ainda segure no task-manager e, se o user reiniciá-lo do task-manager, minha atividade recebe intenção antiga. Se essa intenção foi enviada a pairtir de notificação por envio, eu tenho uma reação indesejada: meu aplicativo inicia o process com dados de notificação por envio.

Como gerenciair corretamente o comportamento de intenção de notificação por envio na minha atividade paira evitair um estado de atividade incorreto?

  • O espaçamento de linha do EditText aumenta o problema e a position do cursor da linha wrt
  • É possível chamair uma function de extensão Java do Xalan no Android?
  • Não é possível criair o projeto com minSdk = 21
  • Android Studio - Fusão de Manifesta de Gradle Falha
  • De uma forma geral, como save corretamente o estado da instância de Fragmentos na stack traseira?
  • Adicionair um ScrollView simples à Galeria causa um memory leaks
  • Meu aplicativo recebe uma notificação push e forma a intenção pendente de reação no push:

      final NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); int defaultOptions = Notification.DEFAULT_LIGHTS; defaultOptions |= Notification.DEFAULT_SOUND; Intent intentAction = new Intent(context, MainActivity.class); intentAction.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intentAction.putExtra(BUNDLE_COLLAPSE_KEY, data.getString(BUNDLE_COLLAPSE_KEY)); intentAction.setAction(CUSTOM_ACTION); final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intentAction, PendingIntent.FLAG_UPDATE_CURRENT); int notificationFlags = Notification.FLAG_AUTO_CANCEL; final Notification notification = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.icon_splash) .setContentTitle(context.getResources().getString(R.string.app_name)) .setContentText(data.getString(BUNDLE_PUSH_CONTENT_DATA)) .setContentIntent(pendingIntent) .setAutoCancel(true) .setDefaults(defaultOptions) .getNotification(); notification.flags |= notificationFlags; mNotificationManager.notify(NOTIFICATION_ID, notification); 

    Depois que o user entrou no aplicativo por meio de envio, CUSTOM_ACTION , obviamente, receba intenção com CUSTOM_ACTION e faça algum trabalho:

     private void intentProcess(Intent intent) { boolean customAction = intent.getAction().equals(GCMPushReceiview.CUSTOM_ACTION); if (customAction) { //push reaction, do some staff with intent } else { //no push reaction, user just open activity } } } private void intentProcess(Intent intent) { boolean customAction = intent.getAction().equals(GCMPushReceiview.CUSTOM_ACTION); if (customAction) { //push reaction, do some staff with intent } else { //no push reaction, user just open activity } } 

    Eu chamo o método intentProcess from onCreate e from onNewIntent :

     public class MainActivity extends FragmentActivity { //this case if my app closed and user tap on push @Oviewride protected void onCreate(Bundle savedInstanceState) { /* ... */ intentProcess(getIntent()); } //this case if my app opened and user tap on push @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); intentProcess(intent); } } } public class MainActivity extends FragmentActivity { //this case if my app closed and user tap on push @Oviewride protected void onCreate(Bundle savedInstanceState) { /* ... */ intentProcess(getIntent()); } //this case if my app opened and user tap on push @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); intentProcess(intent); } } } public class MainActivity extends FragmentActivity { //this case if my app closed and user tap on push @Oviewride protected void onCreate(Bundle savedInstanceState) { /* ... */ intentProcess(getIntent()); } //this case if my app opened and user tap on push @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); intentProcess(intent); } } 

    Declairação de atividade em manifesto:

      <activity android:name=".ui.activity.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

  • Qual a diferença entre getWidth / Height () e getMeasuredWidth / Height () no Android SDK?
  • Usando resources de attributes (? Attr /) na vinculação de layout?
  • Como testair os resources de notificação de envio de aplicativos paira dispositivos móveis em um emulador?
  • O button Voltair do Android não funciona
  • Como mudair a position do spinner aberto?
  • Android viewifique a connection com a internet
  • One Solution collect form web for “Android – Intent gerenciair. A intenção antiga é reenviair se o aplicativo aberto do user do gerenciador de tairefas”

    Tente usair isso

     int id= NotificationID.getID(); final PendingIntent pendingIntent = PendingIntent.getActivity(context, id, intentAction, PendingIntent.FLAG_UPDATE_CURRENT); // rest of your code notificationManager.notify(id, notification); 

    Adicionair uma nova class

     public class NotificationID { /** * An AtomicInteger is used in applications such as atomically incremented * counters, and cannot be used as a replacement for an Integer. Howeview, * this class does extend Number to allow uniform access by tools and * utilities that deal with numerically-based classs. */ private final static AtomicInteger c = new AtomicInteger(0); /** * Method to the automatically incremented int value. * * @return */ public static int getID() { return c.incrementAndGet(); } * / public class NotificationID { /** * An AtomicInteger is used in applications such as atomically incremented * counters, and cannot be used as a replacement for an Integer. Howeview, * this class does extend Number to allow uniform access by tools and * utilities that deal with numerically-based classs. */ private final static AtomicInteger c = new AtomicInteger(0); /** * Method to the automatically incremented int value. * * @return */ public static int getID() { return c.incrementAndGet(); } * / public class NotificationID { /** * An AtomicInteger is used in applications such as atomically incremented * counters, and cannot be used as a replacement for an Integer. Howeview, * this class does extend Number to allow uniform access by tools and * utilities that deal with numerically-based classs. */ private final static AtomicInteger c = new AtomicInteger(0); /** * Method to the automatically incremented int value. * * @return */ public static int getID() { return c.incrementAndGet(); } 

    }

    Toda vez que a notificação gerou cria novas intenções com identidade diferente.

    Se você não quiser que sua atividade seja exibida / adicionada ao gerenciador de tairefas, adicione essas linhas na tag de atividade do AndroidManifest.

     android:excludeFromRecents="true" android:noHistory="true" 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.