通知启动应用程序,否则将活动带到前台。

3
我在我们的应用程序中有多个活动。其中一个活动是启动活动,它是主要的启动器活动。它启动并初始化一些被整个应用程序使用的类,然后结束。
然后是用户大部分时间都停留在的主要活动。当通知创建时,如果应用程序关闭,则这些类将被销毁,因此应用程序会出现错误(nullpointerexception)。
我们需要做的是,如果应用程序关闭,则启动启动器活动,否则将主要活动带到前面。
我在这里尝试了多种解决方案。
- 解决方案1 - 解决方案2 - 解决方案3 这些解决方案都不起作用。任何帮助都将不胜感激。
更新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;
}

这解决了我们在多个活动中遇到的问题,但是又带来了另一个问题:如果用户在主活动中接收到通知,然后关闭应用程序但不点击通知,那么稍后当用户点击通知时,应用程序将再次出现空指针异常,因为在创建通知时应用程序正在运行。
必须有更好的方法来处理这个问题。
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接