【问题标题】:Notification start application else bring activity to front通知启动应用程序,否则将活动带到前面
【发布时间】:2014-05-22 17:04:06
【问题描述】:

我的应用程序中有多个活动。其中一项活动是启动活动,这是主要的启动器活动。它启动并启动了几个由整个应用程序使用并完成的类。

然后是用户大部分时间停留的主要活动。当应用程序关闭时创建通知时,这些类将被销毁,因此应用程序会给出错误(nullpointerexception)。

如果应用程序关闭,我们需要做的是启动启动器活动,否则将主要活动放在前面。

我在这里尝试了多种解决方案。

这些解决方案都不起作用。任何帮助表示赞赏。

更新 1:

如果我们通过检查应用程序是否正在运行来选择待处理的意图应该获得哪个意图。

public boolean isApplicationRunning(Context context) {
    ActivityManager activityManager = (ActivityManager) context
            .getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

    for (RunningTaskInfo task : tasks) {
        if (context.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName()))
            return true;
    }

    return false;
}

这解决了我们在多个活动中遇到的问题。但这带来了另一个问题,如果用户处于主要活动并且收到通知,那么用户关闭应用程序但不点击通知怎么办。稍后当用户单击通知时,应用程序将再次给出 nullpointerexception,因为在创建通知时应用程序正在运行。

必须有更好的方法来处理这个问题。

【问题讨论】:

    标签: android notifications google-cloud-messaging


    【解决方案1】:

    没有人能够回答我的问题。所以,我不得不使用一个不太脏的解决方案。

    所以我们还需要一堂课NotificationActivity

    即使收到来自后端服务器的新通知。我们会将pendingIntent 发送到NotificationActivity。

    NotificationCompt.Builder = bla bla bla.
    Intent intent = new Intent(context, NotificationActivity.class);
    intent.setFlags(FLAG_ACTIVITY_CREATE_NEW_TASK);
    
    PendingIntent pIntent = PendingIntent.startIntent(0, intent, 0, someflags);
    

    在 NotificationActivity 中:

    public class NotificationActivity extends Activity {
    
         @Override
         protected void onCreate(Bundle savedInstances) {
             Intent intent = null;
    
             try {
                 // Call any method from class which is need by Main activity
                 someclass.somemethod();
    
                 // If we are here then it means app is running.
                 intent = new Intent(context, MainActivity.class);
    
                 // Flag it to bring it to front
                 intent.setFlags(FLAG_ACTIVITY_BRING_TO_FRONT);
             } catch (NullPointerException e ) {
    
                 // If we are here then it means that app is closed and 
                 // someclass is garbage collected.
                 intent = new Intent(context, StartAppActivity.class);
    
                 // Flag it to create new task
                 intent.setFlags(FLAG_ACTIVITY_CREATE_NEW_TASK);
             }
    
             // Start intent, and finish this activity
             startActivity(intent);
             finish();
         }
    }
    

    这解决了我上面提到的所有问题。不知道会不会产生新的问题。如果您使用它,请使用低成本的方法。此活动将在您完成后立即被垃圾收集。好的!我撒谎,在不久的将来。

    如果你有多个通知撒谎,这会出现问题,但 android 允许你将所有通知放在一个 pendingIntent 中,这样问题就不会出现。

    我无法提出任何其他问题.. 如果你能告诉我或等到它被测试:D

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      相关资源
      最近更新 更多