应用程序在后台时,广播接收器在前台打开活动?

时间:2012-07-11 05:35:46

标签: android broadcastreceiver

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

  @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);      


    }
  }

2 个答案:

答案 0 :(得分:1)

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

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

Here是功能描述。

修改

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

答案 1 :(得分:0)

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);
    }
}