在我正在设计的Android应用程序中,我的服务只需要在设备连接到路由器时运行(显然通过WiFi).我是android的新手,到目前为止我所拥有的东西已经让我永远实现了,所以我真的希望得到一些指示.
我的服务设置为在手机启动时启动.此外,当Activity启动时,它会检查服务是否正在运行 - 如果没有,则启动它.我只是想知道如果WiFi状态丢失,我可以将哪些代码放入我的服务中以使其关闭 - 以及一旦WiFi连接变为活动状态,我需要使用什么代码才能启动服务?
谢谢!:)
Phi*_*hil 27
您可以创建一个处理wifi连接更改的BroadcastReceiver.
更确切地说,你需要创建一个类 - 比如说NetWatcher:
public class NetWatcher extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//here, check that the network connection is available. If yes, start your service. If not, stop your service.
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null) {
if (info.isConnected()) {
//start service
Intent intent = new Intent(context, MyService.class);
context.startService(intent);
}
else {
//stop service
Intent intent = new Intent(context, MyService.class);
context.stopService(intent);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
(更改MyService为您的服务名称).
此外,在您的AndroidManifest,您需要添加以下行:
<receiver android:name="com.example.android.NetWatcher">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
(更改com.example.android为包的名称).
正如@Phil所说,你应该扩展BroadcastReceiver,并在onReceive方法中启动或停止服务.就像是:
class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
//start service
} else {
//stop service
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将此作为活动的私有类,并在活动创建时注册接收器,并在活动销毁时取消注册.
| 归档时间: |
|
| 查看次数: |
17944 次 |
| 最近记录: |