Android广播接收器无法关闭应用程序

时间:2015-10-03 08:23:15

标签: android broadcastreceiver android-intentservice

我创建了一个广播接收器来监听连接变化事件。 当我使用主页按钮最小化应用程序时,接收器工作正常。 但是,当我使用后退按钮退出应用程序广播接收器停止侦听连接更改。 我搜索了它,发现我应该从服务中调用广播接收器,但这也不适用于应用程序关闭。 这是我的服务广播接收器代码。

互联网服务

 public class InternetService extends Service {

    NetworkChangeReceiver networkChangeReceiver;

    public InternetService() {
        super();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, filter);
        return Service.START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

广播接收器

public class NetworkChangeReceiver extends BroadcastReceiver {
    boolean isConnected = false;

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

    }


    private boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo info = connectivity.getActiveNetworkInfo();
            if (info != null) {
                if (info.isConnected()) {
                    if (!isConnected) {
                        isConnected = true;
                        Toast.makeText(getBaseContext(), "Connected to internet", Toast.LENGTH_LONG).show();
                        Log.v("Internet", "Internet Connected");
                        hitDataService();
                        Intent intent = new Intent(ActivityForm.this, MyService.class);
                        startService(intent);
                    }
                    return true;
                }
            }
        }
        isConnected = false;
        return false;
    }
}

即使在应用关闭和移动设备连接到互联网时,我也希望将一些数据发送到服务。 有没有其他方法可以获得相同的行为。

我也尝试在onCreateMethod()中添加以下行但仍然没有运气

ComponentName receiver = new ComponentName(getBaseContext(), NetworkChangeReceiver.class);
                                                    PackageManager pm = getBaseContext().getPackageManager();
                                                    pm.setComponentEnabledSetting(receiver,
                                                            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                                                            PackageManager.DONT_KILL_APP);

2 个答案:

答案 0 :(得分:0)

成功处理警报事件的

Here is the Sample Code,即使在DDMS终止进程后也是如此。

您可以检查以上示例中广播接收器的实现,即使在应用关闭后也能正常工作。

希望这会对你有所帮助。

答案 1 :(得分:0)

如果您希望在关闭应用后让应用监听NetworkChangeReceiver广播,请确保在应用关闭之前运行InternetService

假设您的主要活动名为MainActivity,您可以这样做:

@Override
protected void onDestroy() {
    super.onDestroy();
    Intent intent = new Intent(MainActivity.this, InternetService.class);
    startService(intent);
}

对于NetworkChangeReceiver this answer可能会有帮助。