0

在我的项目中,如果应用程序被终止时没有互联网连接,我希望用户在有可用的互联网连接时收到通知。我通过在 Activity 的 onCreate() 上启动服务来做到这一点,然后一旦应用程序被终止并且服务 onTaskRemoved 被触发,就会发生以下代码。但是正如你所看到的,我基本上有一个 while 结构在没有连接并且有连接(并且 while 结构结束)时运行,通知被启动。但我不认为这是代码的正确方法,实际上它只有在终止应用程序和建立 wifi 连接之间的差距很小的情况下才有效。此外,我相信代码在主线程中运行,因为一旦启动通知,我只会在终端上获得“应用程序终止”。我怎样才能解决这个问题?再一次,我希望用户在应用程序被终止后有可用的互联网连接时收到通知。

public void onTaskRemoved(Intent rootIntent) {
  if(!isConnected(this)) {
    while (!isConnected(this)) {
    }
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, Home.CHANNEL_ID).setSmallIcon(R.mipmap.ic_launcher).setContentTitle("Network").setContentText("Network Available");
    NotificationManager nNotifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    nNotifyMgr.notify(1, builder.build());
  }
}
4

1 回答 1

0

如果您的应用程序被杀死并且您仍想通过您的应用程序天气设备获得通知,那么您需要使用广播接收器。广播接收器可以在您的应用程序处于后台、前台或被杀死的情况下工作。您可以使用以下代码

1)创建一个类

public class ConnectivityReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
      if (checkWifiConnect()) {
        Log.d(TAG, "wifi has connected");
        // TODO
    }        
}

private boolean checkWifiConnect() {
ConnectivityManager manager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo != null
        && networkInfo.getType() == ConnectivityManager.TYPE_WIFI
        && networkInfo.isConnected()) {
    return true;
}
return false;
}
}

2)您还需要在清单中注册您的接收器。使用下面的代码

<receiver android:name=".your.namepackage.here.ConnectivityReceiver">
<intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>

希望这会帮助你。

于 2019-01-25T00:31:34.087 回答