需要源码请点赞关注收藏后评论区留言私信~~~
一、开启定位功能
手机定位分为卫星定位和网络定位两大类。
(1)卫星定位 卫星定位服务由几个全球卫星导航系统提供。 卫星定位的原理是根据多颗卫星与导航芯片的通信结果得到手机与卫星距离,然后计算手机当前所处的经度、纬度以及海拔高度。 使用卫星定位需开启手机上的GPS功能。
(2)网络定位 网络定位又分为基站定位与WiFi定位。
(1)基站定位 手机插上SIM卡后,SIM卡会搜索周围的基站信号并接入通信服务。 用基站定位需开启手机上的数据连接功能。
(2)WiFi定位 手机接入某个公共热点网络,比如首都机场的WiFi,查询WiFi路由器的位置便可得知该手机的大致位置。 使用WiFi定位需开启手机上的WLAN功能。
运行App后会显示你手机的对应功能是否开启
代码如下
Java类
package com.example.location; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.widget.CheckBox; import androidx.appcompat.app.AppCompatActivity; import com.example.location.util.SwitchUtil; @SuppressLint("SetTextI18n") public class LocationSettingActivity extends AppCompatActivity { private CheckBox ck_gps; // 声明一个定位功能的复选框对象 private CheckBox ck_wlan; // 声明一个WLAN功能的复选框对象 private CheckBox ck_mobiledata; // 声明一个数据连接功能的复选框对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location_setting); ck_gps = findViewById(R.id.ck_gps); ck_wlan = findViewById(R.id.ck_wlan); ck_mobiledata = findViewById(R.id.ck_mobiledata); } @Override protected void onResume() { super.onResume(); // 获取定位功能的开关状态 boolean isGpsOpen = SwitchUtil.getLocationStatus(this); ck_gps.setChecked(isGpsOpen); ck_gps.setText("定位功能" + ((isGpsOpen)?"开启":"关闭")); // 获取WLAN功能的开关状态 boolean isWlanOpen = SwitchUtil.getWlanStatus(this); ck_wlan.setChecked(isWlanOpen); ck_wlan.setText("WLAN功能" + ((isWlanOpen)?"开启":"关闭")); // 获取数据连接功能的开关状态 boolean isMobileOpen = SwitchUtil.getMobileDataStatus(this); ck_mobiledata.setChecked(isMobileOpen); ck_mobiledata.setText("数据连接" + ((isMobileOpen)?"开启":"关闭")); ck_gps.setOnCheckedChangeListener((buttonView, isChecked) -> { // 跳转到系统的定位设置页面 startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); }); ck_wlan.setOnCheckedChangeListener((buttonView, isChecked) -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // 跳转到系统的WLAN设置页面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); } else { // Android10之后,普通应用不能直接开关WLAN // 设置WLAN功能的开关状态 SwitchUtil.setWlanStatus(this, isChecked); ck_wlan.setText("WLAN功能" + ((isChecked)?"开启":"关闭")); } }); ck_mobiledata.setOnCheckedChangeListener((buttonView, isChecked) -> { // 跳转到系统的移动网络设置页面 startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); }); } }
XML文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="10dp" > <CheckBox android:id="@+id/ck_gps" android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="left|center_vertical" android:button="@null" android:checked="false" android:drawableLeft="@drawable/ck_status_selector" android:text="GPS" android:textColor="#000000" android:textSize="17sp" /> <CheckBox android:id="@+id/ck_wlan" android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="left|center_vertical" android:button="@null" android:checked="false" android:drawableLeft="@drawable/ck_status_selector" android:text="WLAN" android:textColor="#000000" android:textSize="17sp" /> <CheckBox android:id="@+id/ck_mobiledata" android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="left|center_vertical" android:button="@null" android:checked="false" android:drawableLeft="@drawable/ck_status_selector" android:text="数据连接" android:textColor="#000000" android:textSize="17sp" /> </LinearLayout>
创作不易 觉得有帮助请点赞关注收藏~~~