2013-04-26 2 views
1

Я работаю над приложением, в котором пользователь может войти в систему. И зарегистрированный пользователь может увидеть их обзор в активности панели. И если какой-либо новый обзор поступит на сервер, он будет вызывать уведомление. Все работает отлично. Кроме того, когда пользователь нажимает на уведомление, он каждый раз открывает новую активность панели мониторинга, если также активна панель управления.как восстановить активность в уведомлении нажмите i android

Что я хочу, так это то, что если пользователь нажмет на уведомление, он откроет активность панели только тогда, когда приложение не будет запущено. в противном случае, если активность панели управления находится впереди, и если пользователь нажмет на нее, она сначала закроет активность панели и снова откроет страницу активности. Вот код, который я написал, чтобы перейти к деятельности панели.

Intent startActivityIntent = new Intent(this, DashboardActivity.class); 
    startActivityIntent.putExtra("NotificationMessage", service_notification); 
    startActivityIntent.putExtra("flag", 1); 
    startActivityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent launchIntent = PendingIntent.getActivity(this, 0, 
      startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    earthquakeNotificationBuilder 
       .setContentIntent(launchIntent) 
       .setContentTitle(no_of_review + " " + "new review is there") 
       .setAutoCancel(true); 

Я пробовал много вещей, но не получил решения. Может кто-нибудь мне помочь? Заранее спасибо.

ответ

3

и android:launchMode="singleTask" в вашем AndroidManifest.xml, так что вы можете ANDD android:clearTaskOnLaunch="true

 <activity 
      android:name=".DashboardActivity" 
      android:launchMode="singleTask" 
      android:clearTaskOnLaunch="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
+0

я изменил это. Но если активность панели мониторинга открыта, ничего не происходит. То, что я хочу, это то, что если активность панели инструментов уже открыта, то, если я нажму на уведомление, она сначала закроет ее, а затем снова откроет ее. – Avijit

+0

так и 'android: clearTaskOnLaunch =" true' тоже – buptcoder

+0

Что такое флаг, который я должен передать с намерением вместо этого (startActivityIntent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);) – Avijit

0

Что вы делаете, что вы создаете новый вид деятельности, каждый раз, когда пользователь нажимает на уведомление. Теперь вам нужно добавить этот FLAG_ACTIVITY_CLEAR_TOP в свои намерения, а также изменить launchmode вашей деятельности в категории ManifestFile. Также Override OnNewIntent() метода в DashboardActivity

Вот некоторый код, чтобы помочь вам

startActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

И Измените ManifestFile как этого

<activity 
    android:name=".DashboardActivity" 
    android:launchMode="singleTop"> 
</activity> 

Затем Override OnNewIntent метода в DashBoard Активность:

@Override 
    protected void onNewIntent(Intent intent) { 

     DashboardActivity.this.finish(); 

     // -----Start New Dashboard when notification is clicked---- 

     Intent i = new Intent(DashboardActivity.this, DashboardActivity.class); 

     startActivity(i); 

     super.onNewIntent(intent); 
    } 

Метод OnNewIntent будет срабатывать всякий раз, когда ваша деятельность существует и уведомление щелкнуло

Также изучите launchmodes, если вы хотите, чтобы ваши действия ведут себя по-разному в различных ситуациях.

+0

Я изменил это. Но если активность панели мониторинга открыта, ничего не происходит.То, что я хочу, это то, что если активность панели инструментов уже открыта, то, если я нажму на уведомление, она сначала закроет ее, а затем снова откроет ее. – Avijit

+0

@Andu Теперь проверьте это, я изменил ответ. Он должен работать так, как вы этого хотите –

+0

Должен ли я вызвать методNewIntent (намерение) из метода onCreate? – Avijit

1

Этот код будет снова открыть деятельность, если она открыта, в противном случае приложение будет снова начать

 ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE); 
     List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); 
     ActivityManager.RunningTaskInfo task = tasks.get(0); // get current task 
     ComponentName rootActivity = task.baseActivity; 

     Intent notificationIntent; 
     if(rootActivity.getPackageName().equalsIgnoreCase("your package name")){ 
      //your app is open 
      // Now build an Intent that will bring this task to the front 
      notificationIntent = new Intent(); 
      notificationIntent.setComponent(rootActivity); 
      notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 

     } 
     else 
     { 
//your app is not open,start it by calling launcher activity 
      notificationIntent = new Intent(context, SplashActivity.class); 


     } 
     notificationIntent.setAction(Intent.ACTION_MAIN); 
     notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 





     PendingIntent intent = PendingIntent.getActivity(context, 0, 
       notificationIntent, 0); 

//use this pending intent in notification.. 

см полный пример HERE ..

+0

Его работа совершенная :) – NarendraJi

Смежные вопросы