我开发了一个小型应用程序,无论何时在所有情况下关闭或运行,都可以检测到on
,off
或从Wifi
到Ethernet
的连接更改。 / p>
在Nuget 7
后台服务中测试应用时,当应用终止时,提供的代码在Oreo 8
之前对我有效。
如何在Oreo
中使用它?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent vpnServiceIntent = new Intent(getBaseContext(), MyService.class);
startForegroundService(vpnServiceIntent);}}
WifiReceiver.java
文件
public class WifiReceiver extends BroadcastReceiver {
static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (CONNECTIVITY_CHANGE_ACTION.equals(action)) {
if (!isConnected()) {
if (context != null) {
Toast.makeText(context," Not connected...",Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(context,"connected...",Toast.LENGTH_LONG).show();
}
}
}
}
MySevice.java
文件
public class MyService extends Service
{
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
WifiReceiver receiver =new WifiReceiver();
registerReceiver(receiver,filter);
return START_STICKY;
}
}
Manifest.xml
文件
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
<receiver android:name=".WifiReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<service android:name=".MyService" />
</application>
注意:如果我在startForeground(101, notification);
类的onCreate
中调用MyService
,则我上面的代码可以正常工作,但显示为永久{最不需要的状态栏上的{1}}图标。
答案 0 :(得分:1)
由于Android 8.0(API级别26),由于电池优化和安全性原因,当应用不可见时,基本上不可能运行后台服务。
糟透了,许多有用的应用程序无法正常运行和运行。
他们建议使用ForegroundService
,它需要显示通知。
这几乎可以,但是这些ForegroundServices
也会在一段时间后被杀死。
为避免杀死它们,您需要进行BatteryOptimization
提示,以便用户允许服务在后台运行而不被杀死。
但是它还没有结束。在大多数制造商(如三星,华为等)中,服务仍被杀死,因为它们自身执行得不好的BatteryOptimizations
与本机并行运行...并且如果用户希望某些应用程序避免在后台运行时被杀死,因此它必须走很长的路要进行设置才能找到提供程序特定的设置并让应用程序运行。...
这是一个示例,如何在Slack
上更改这些提供程序特定的设置我认为这是Android发生的最糟糕的事情.....