繁体   English   中英

从广播接收器关闭申请

[英]Close application from broadcast receiver

我是android编程的新手。 我已经尝试在活动中注册广播接收器,但我的接收器在应用程序onPause时无法正常工作。 所以我发现我需要在清单中注册我的接收器。

我的目标是在用户关闭Wifi后关闭我的应用程序一段时间。

这是我的代码但不起作用。

public class ReceiverWifi extends BroadcastReceiver {

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

        Handler handler = new Handler();
        Runnable runnable = new Runnable() {

            @Override
            public void run() {
                MainActivity m = new MainActivity();
                m.finish();

            }
        };

        if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {

            int newWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                    WifiManager.WIFI_STATE_UNKNOWN);

            switch (newWifiState) {

            case WifiManager.WIFI_STATE_DISABLED:

                Toast.makeText(context, "Wi-fi Disconnected ",
                        Toast.LENGTH_SHORT).show();

                handler.postDelayed(runnable, 15 * 1000);
                break;

            }
        }

    }
}

我的清单:

<receiver android:name="com.example.wifimonitor.ReceiverWifi" >
    <intent-filter>
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>

我如何实现目标?

使用下面的代码从BroadcastReceiver向MainActivity发送新意图:

Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("close_activity",true);
context.startActivity(i);

在MainActivity中使用OnNewIntent如下:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if(intent.getBooleanExtra("close_activity",false)){
        this.finish();

    }
}

仅供参考,我没有尝试过上面的代码,但我有类似的代码工作。

MainActivity m = new MainActivity();
m.finish();

当你说完成时,它不会从堆栈中清除,因为你没有先将活动加载到堆栈中。 MainActivity不是活动,它只是代码中的一个类对象

在主要活动中有广播接收器,当接收完成活动时。 不要用new创建实例。

您的广播接收器是否在主要活动类中? 如果是这样,您可以保存应用程序的全局上下文,稍后在广播接收器中关闭它。

如果它位于服务或提供商上,只需在启动/注册时向其发送应用实例。 然后从该实例调用finish()。

编辑:

试试这个:

在您的主要活动中创建此公共方法:

   public static void closeActivity(){
        finish();
   }

然后在你的广播接收器中调用这个方法,如:

   MainActivity.closeActivity();

希望能帮助到你 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM