ใน Android ตรวจสอบว่าข้อมูลมือถือเปิดหรือปิดอยู่
แอพของฉันต้องการฟังก์ชันเพื่อตรวจสอบว่าโทรศัพท์มือถือของผู้ใช้เปิดข้อมูลมือถือหรือไม่
ฉันได้อ้างถึงลิงก์นี้: # 32239785
นี่คือรหัสที่ให้ไว้ในหัวข้อนั้น
boolean mobileYN = false;
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getSimState() == TelephonyManager.SIM_STATE_READY) {
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1)
{
mobileYN = Settings.Global.getInt(context.getContentResolver(), "mobile_data", 1) == 1;
}
else{
mobileYN = Settings.Secure.getInt(context.getContentResolver(), "mobile_data", 1) == 1;
}
}
รหัสนี้ใช้ได้กับโทรศัพท์มือถือส่วนใหญ่ของฉัน
ยกเว้น "Nokia 8" (Android 9)
แม้ว่าฉันจะปิดข้อมูลมือถือ ฟังก์ชันนี้ยังคงคืนค่าจริง
ทำไม?
คำตอบ
คุณต้องการจริงๆเพื่อตรวจสอบว่าการตั้งค่าสำหรับโทรศัพท์มือถือที่ข้อมูลจะถูกเปิดใช้งานหรือปิดการใช้งานหรือสิ่งที่คุณพยายามทำคือการตรวจสอบว่าอุปกรณ์ในขณะนี้มีการเชื่อมต่อโทรศัพท์มือถือข้อมูล?
หากเป็นกรณีหลังคุณควรใช้CONNECTIVITY_SERVICE
ตัวอย่างจากเอกสาร :
private static final String DEBUG_TAG = "NetworkStatusExample";
...
ConnectivityManager connMgr =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isWifiConn = false;
boolean isMobileConn = false;
for (Network network : connMgr.getAllNetworks()) {
NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
isWifiConn |= networkInfo.isConnected();
}
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
isMobileConn |= networkInfo.isConnected();
}
}
Log.d(DEBUG_TAG, "Wifi connected: " + isWifiConn);
Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn);
ลิงก์เอกสารด้านบนยังมีลิงก์ไปยังชั้นเรียนอื่น ๆ ที่เกี่ยวข้องซึ่งคุณอาจต้องการตรวจสอบเช่นNetworkInfo.DetailedStateและConnectivityManager.NetworkCallback
ตรวจสอบสิ่งนี้หากช่วยได้:
class InternetNetwork {
companion object {
fun isOnline(context: Context): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val capabilities =
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
if (capabilities != null)
when {
capabilities.hasTransport(TRANSPORT_CELLULAR) -> {
Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
return true
}
capabilities.hasTransport(TRANSPORT_WIFI) -> {
Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
return true
}
capabilities.hasTransport(TRANSPORT_ETHERNET) -> {
Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
return true
}
}
} else {
val connectivityManage =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val netInfo = connectivityManage.activeNetworkInfo
return netInfo != null && netInfo.isConnected
}
return false
}
}
}