完成 activity 从广播接收器开始

Finish activity started from broadcast receiver

在我的 android 应用程序中,我想使用广播接收器来检查网络状态。 到目前为止,我已经使用

创建了一个广播接收器
    public class NetworkChangeListener extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getExtras() != null)
        {
            final ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo ni=connectivityManager.getActiveNetworkInfo();

            if(ni!=null && ni.isConnectedOrConnecting())
            {
                //here i want to close the activity which is open from the else block
            }
            else
            {
                Intent mIntent = new Intent(context,NetworkDialog.class);
                mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(mIntent);

            }
        }
    }
}

如您在上面的代码中所见,我在 else 块中调用 Networkdialog activity。 我想提一下, NetworkDialog.class 是 activity,但我已将其样式设置为对话框,使用清单文件中的以下代码

<activity
            android:name=".NetworkDialog"
            android:excludeFromRecents="true"
            android:label="You are Offline"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Light.Dialog.Alert"
            android:windowSoftInputMode="stateHidden" />

现在,问题是,这个activity在网络不可用的情况下调用成功, 但是当用户连接到互联网时,我无法完成这个 activity.

(注意-众所周知,广播接收器在全球范围内工作,这意味着即使您的应用程序未激活它也会工作,因此为防止这种情况,我没有在清单文件中注册接收器,我正在注册并在我想使用该接收器的 activity 中注销它)

所以我只想问,如何在第一个 if 块中完成该对话框 activity,它是从 else 块中的意图调用的

这是我更新的代码

NetworkDialog.java

    public class NetworkDialog extends AppCompatActivity {
    public IntentFilter filter;

    BroadcastReceiver receiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

                Toast.makeText(context,"Finish Activity here",Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.network_dialog);
        setFinishOnTouchOutside(false);

        filter=new IntentFilter();
        filter.addAction("com.hello.action");
        registerReceiver(receiver,filter);

    }
}

广播接收器class

    public class NetworkChangeListener extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getExtras() != null)
        {
            final ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo ni=connectivityManager.getActiveNetworkInfo();

            if(ni!=null && ni.isConnectedOrConnecting())
            {
                Intent local=new Intent();
                local.setAction("com.hello.action");
                context.sendBroadcast(local);
            }
            else
            {
                Intent mIntent = new Intent(context,NetworkDialog.class);
                mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(mIntent);

            }
        }
    }
}

我没有更改任何其他文件

   public class NetworkChangeListener extends BroadcastReceiver
 {
    @Override
   public void onReceive(Context context, Intent intent)
 {
    if(intent.getExtras() != null)
    {
        final ConnectivityManager connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo ni=connectivityManager.getActiveNetworkInfo();

        if(ni!=null && ni.isConnectedOrConnecting())
        {
            //here You need to call local broadcast receiver
            // Like this 
               Intent local = new Intent();
               local.setAction("com.hello.action");
               sendBroadcast(local);


        }
        else
        {
            Intent mIntent = new Intent(context,NetworkDialog.class);
            mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(mIntent);

        }
      }
   }
}

对话框代码 activity

   public class YourDialogActivity extends Activity {
     ArrayAdapter<String> adapter;

     @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

      IntentFilter filter = new IntentFilter();

      filter.addAction("com.hello.action");
      registerReceiver(receiver, filter);

    }
        BroadcastReceiver receiver = new BroadcastReceiver() {

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

      }
    };

    public void finish() {
        super.finish();
        };
   }