【问题标题】:Android Broadcast receiver not working on app closeAndroid广播接收器在应用程序关闭时不起作用
【发布时间】:2015-10-03 08:23:14
【问题描述】:

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

互联网服务

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

【问题讨论】:

  • 你的广播接收器是一个活动的内部类?
  • 是的,它是一个内部类
  • 我会开始在单独的类中移动它或使其成为静态
  • 您是否强制关闭您的应用程序
  • 不只是做背压

标签: android broadcastreceiver android-intentservice


【解决方案1】:

Here is the Sample Code 成功处理警报事件,即使该进程已被 DDMS 终止。

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

希望这会对你有所帮助。

【讨论】:

  • 在此示例中,他们使用警报管理器对象和挂起的缩进。我也可以用它来检查连接变化吗??
【解决方案2】:

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

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

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

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

【讨论】:

  • 这也没有帮助
  • 这个异常意味着必须实现一个没有参数的构造函数,检查错误发生的行号以知道哪个类出错。
  • 是的,我解决了这个错误,但从 onDestroy 调用服务没有帮助
  • 我认为服务已启动,但BroadcastReciver 不工作
  • 是的,它没有在应用关闭时监听事件服务工作正常我之前测试过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
相关资源
最近更新 更多