我创建了一个广播接收器来监听连接变化事件。 当我使用主页按钮最小化应用程序时,接收器工作正常。 但是,当我使用后退按钮退出应用程序广播接收器停止侦听连接更改。 我搜索了它,发现我应该从服务中调用广播接收器,但这也不适用于应用程序关闭。 这是我的服务广播接收器代码。
互联网服务
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);
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您希望在关闭应用后让应用监听NetworkChangeReceiver
广播,请确保在应用关闭之前运行InternetService
。
假设您的主要活动名为MainActivity
,您可以这样做:
@Override
protected void onDestroy() {
super.onDestroy();
Intent intent = new Intent(MainActivity.this, InternetService.class);
startService(intent);
}
对于NetworkChangeReceiver
this answer可能会有帮助。