【问题标题】:Broadcast receiver opens up activity in foreground when application is in background?当应用程序在后台时,广播接收器在前台打开活动?
【发布时间】:2014-04-10 04:42:05
【问题描述】:

我有一个接收互联网连接的广播接收器。一旦它没有找到任何连接,它就会打开我的启动活动,说“没有互联网连接”......直到现在一切正常,但是当用户使用设备主页按钮将应用程序置于后台,然后关闭互联网连接,当应用程序在后台运行时,启动活动进入前台。我不希望这种情况发生,启动活动应该打开,但只能在后台打开。

  @Override
  public void onReceive(Context context, Intent intent) {


    //  SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);

    boolean isNetworkDown = intent.getBooleanExtra(
        ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);    

    if (isNetworkDown) {
      Log.d(TAG, "onReceive: NOT connected, stopping UpdaterService");
      Intent myintent=new Intent(context,NoConnectivity.class);
      myintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(myintent);

    } else 

    {

      Log.d(TAG, "onReceive: connected, starting UpdaterService");
      NoConnectivity.h.sendEmptyMessage(0);      


    }
  }

【问题讨论】:

  • 请发布您的 BroadcastReceiver 代码。
  • 我已经发布了...请检查一下

标签: android broadcastreceiver


【解决方案1】:

startActivity 会自动将活动带到您正在查看的活动之上的前台。用户可以使用后退按钮返回上一个。这是通常的工作方式。

但是,您可以使用moveTaskToBack(true) 将您的活动发送到后台。

Here是函数描述。

编辑

查看this question 并使用该解决方案查看您的活动是否在后台。如果是,则使用我上面建议的方法将新活动发送到后台。

【讨论】:

  • 我想你不明白我的问题..问题是如果应用程序在后台,则将启动活动保持在后台...所以当用户正在处理其他事情时,如果互联网连接消失了,然后突然飞溅活动不应该出现在前台并打扰用户
  • 如果您的活动的唯一工作是显示有关互联网连接的消息,那么 Toast 消息会更适合您。无论活动是在前台还是后台,它只会出现几秒钟然后消失。
  • 我只需要那个......这就是问题人......TOAST不是一个解决方案......如果你能建议我禁用并再次启用广播接收器会很有帮助......谢谢...
  • 如果您只想通知用户连接已断开,您能否详细说明为什么 Toast 不是解决方案?
【解决方案2】:
if (isNetworkDown) {
    Log.d(TAG, "onReceive: NOT connected, stopping UpdaterService");

    // Check the foreground package
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(1);
    ComponentName topActivity = runningTasks.get(0).topActivity;
    String foregroundPackageName = topActivity.getPackageName();
    if(foregroundPackageName.equals(context.getPackageName()) {
        Intent myintent = new Intent(context,NoConnectivity.class);
        myintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(myintent);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多