修改net

This commit is contained in:
yuqian 2026-01-09 09:59:47 +08:00
parent 28fd0ec63f
commit 5ddc90b9ff
6 changed files with 210 additions and 35 deletions

View File

@ -0,0 +1,92 @@
package com.xyzshell.myphoneinfo.custom
import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
object PermissionChecker {
/**
* 检查单个权限
*/
fun hasPermission(context: Context, permission: String): Boolean {
return ContextCompat.checkSelfPermission(
context,
permission
) == PackageManager.PERMISSION_GRANTED
}
/**
* 检查Wi-Fi权限
*/
fun hasWifiPermission(context: Context): Boolean {
val permissions = mutableListOf(Manifest.permission.ACCESS_WIFI_STATE)
// Android 10+ 需要位置权限
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION)
}
return permissions.all { hasPermission(context, it) }
}
/**
* 检查电话权限
*/
fun hasPhonePermission(context: Context): Boolean {
return hasPermission(context, Manifest.permission.READ_PHONE_STATE)
}
/**
* 检查所有权限
*/
fun hasWifiAndPhonePermissions(context: Context): Boolean {
return hasWifiPermission(context) && hasPhonePermission(context)
}
/**
* 获取缺少的权限列表
*/
fun getMissingPermissions(context: Context): List<String> {
val permissions = mutableListOf<String>()
// 检查 Wi-Fi 相关权限
if (!hasPermission(context, Manifest.permission.ACCESS_WIFI_STATE)) {
permissions.add(Manifest.permission.ACCESS_WIFI_STATE)
}
// Android 10+ 需要位置权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
!hasPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) {
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION)
}
// 检查电话权限
if (!hasPermission(context, Manifest.permission.READ_PHONE_STATE)) {
permissions.add(Manifest.permission.READ_PHONE_STATE)
}
return permissions
}
fun requestSimple(
activity: Activity,
onGranted: () -> Unit = {},
onDenied: () -> Unit = {}
) {
val missingPermissions = getMissingPermissions(activity)
if (missingPermissions.isEmpty()) {
onGranted()
return
}
ActivityCompat.requestPermissions(
activity,
missingPermissions.toTypedArray(),
1000
)
}
}

View File

@ -19,8 +19,8 @@ class SignalStrengthView @JvmOverloads constructor(
style = Paint.Style.FILL style = Paint.Style.FILL
} }
private val inactiveColor = "#eeeeee".toColorInt() private val inactiveColor = "#B7D7D3".toColorInt()
private val activeColor = "#1E8C29".toColorInt() private val activeColor = "#3B948A".toColorInt()
private var strengthLevel: Int = 0 private var strengthLevel: Int = 0
private val maxBars = 5 private val maxBars = 5

View File

@ -1,17 +1,23 @@
package com.xyzshell.myphoneinfo.dashboard package com.xyzshell.myphoneinfo.dashboard
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import com.xyzshell.andinfo.AndInfo
import com.xyzshell.andinfo.libs.NetworkInfo
import com.xyzshell.myphoneinfo.R import com.xyzshell.myphoneinfo.R
import com.xyzshell.myphoneinfo.custom.PermissionChecker
import com.xyzshell.myphoneinfo.databinding.FragmentNetworkBinding import com.xyzshell.myphoneinfo.databinding.FragmentNetworkBinding
import com.xyzshell.myphoneinfo.dialog.ShowLoadFragment import com.xyzshell.myphoneinfo.dialog.ShowLoadFragment
class NetworkFragment : Fragment() { class NetworkFragment : Fragment() {
private var status=1//0:未连接1已连接 private var status=0//0:未连接1wifi 2:数据流量
private lateinit var networkInfo: NetworkInfo
private lateinit var binding:FragmentNetworkBinding private lateinit var binding:FragmentNetworkBinding
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -30,16 +36,45 @@ private lateinit var binding:FragmentNetworkBinding
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
//connection if(!PermissionChecker.hasWifiAndPhonePermissions(context = requireContext())){
PermissionChecker.requestSimple(
requireActivity(),
onGranted = {
// 权限已授予,执行操作
},
onDenied = {
// 权限被拒绝
Toast.makeText(context, getString(R.string.permissions_required), Toast.LENGTH_SHORT).show()
}
)
}
networkInfo= AndInfo.instance.network
val currentNetworkType = networkInfo.getCurrentNetworkType()
when (currentNetworkType) {
NetworkInfo.NetworkType.WIFI -> {
status = 1
setWifiDetail()
}
NetworkInfo.NetworkType.MOBILE -> {
status = 2
setMobileInfo()
}
else -> {
status = 0
setNoConnect()
}
}
//wifi
binding.networkLayout.wfText1.textTitle.text=getString(R.string.status) binding.networkLayout.wfText1.textTitle.text=getString(R.string.status)
binding.networkLayout.wfText2.textTitle.text=getString(R.string.network) // binding.networkLayout.wfText2.textTitle.text=getString(R.string.network)
binding.networkLayout.wfText3.textTitle.text=getString(R.string.bssid) binding.networkLayout.wfText3.textTitle.text=getString(R.string.bssid)
binding.networkLayout.wfText4.textTitle.text=getString(R.string.function) binding.networkLayout.wfText4.textTitle.text=getString(R.string.function)
binding.networkLayout.wfText5.textTitle.text=getString(R.string.connection_speed) binding.networkLayout.wfText5.textTitle.text=getString(R.string.connection_speed)
binding.networkLayout.wfText6.textTitle.text=getString(R.string.signal_strength) binding.networkLayout.wfText6.textTitle.text=getString(R.string.signal_strength)
binding.networkLayout.wfText7.textTitle.text=getString(R.string.frequency) binding.networkLayout.wfText7.textTitle.text=getString(R.string.frequency)
binding.networkLayout.wfText8.textTitle.text=getString(R.string.frequency_band) binding.networkLayout.wfText8.textTitle.text=getString(R.string.channel)
binding.networkLayout.wfText9.textTitle.text=getString(R.string.channel)
binding.networkLayout.wfText10.textTitle.text=getString(R.string.standard) binding.networkLayout.wfText10.textTitle.text=getString(R.string.standard)
//dhcp //dhcp
@ -69,20 +104,6 @@ private lateinit var binding:FragmentNetworkBinding
binding.simText3.textTitle.text=getString(R.string.roaming) binding.simText3.textTitle.text=getString(R.string.roaming)
binding.simText4.textTitle.text=getString(R.string.network_type) binding.simText4.textTitle.text=getString(R.string.network_type)
if(status==0){
binding.noConnect.visibility=View.VISIBLE
binding.connectData.visibility=View.GONE
binding.networkLayout.wfText1.textContent.text="Disconnected"
binding.networkLayout.wifiList.visibility=View.GONE
binding.networkLayout.llPubShow.visibility=View.GONE
}else{
binding.noConnect.visibility=View.GONE
binding.connectData.visibility=View.VISIBLE
binding.networkLayout.wfText1.textContent.text="Connected"
binding.networkLayout.wifiList.visibility=View.VISIBLE
binding.networkLayout.llPubShow.visibility=View.VISIBLE
}
binding.networkLayout.pubShow.setOnClickListener{ binding.networkLayout.pubShow.setOnClickListener{
val tag = "showLoadFragment" val tag = "showLoadFragment"
if (requireActivity().supportFragmentManager.findFragmentByTag(tag) == null) { if (requireActivity().supportFragmentManager.findFragmentByTag(tag) == null) {
@ -92,6 +113,69 @@ private lateinit var binding:FragmentNetworkBinding
} }
} }
private fun setNoConnect() {
binding.noConnect.visibility=View.VISIBLE
binding.connectData.visibility=View.GONE
binding.networkLayout.wfText1.textContent.text="Disconnected"
binding.networkLayout.wifiList.visibility=View.GONE
binding.networkLayout.llPubShow.visibility=View.GONE
}
/**
* 设置流量信息
* */
private fun setMobileInfo() {
binding.noConnect.visibility=View.GONE
binding.conText1.text=getString(R.string.mobile)
binding.connectData.visibility=View.VISIBLE
binding.networkLayout.wfText1.textContent.text="Connected"
binding.networkLayout.wifiList.visibility=View.VISIBLE
binding.networkLayout.llPubShow.visibility=View.VISIBLE
networkInfo.getMobileDetails()?.let { mobileDetails ->
}
}
/**
* 设置wifi信息
* */
// binding.networkLayout.wfText2.textTitle.text=getString(R.string.network)
// binding.networkLayout.wfText3.textTitle.text=getString(R.string.bssid)
// binding.networkLayout.wfText4.textTitle.text=getString(R.string.function)
// binding.networkLayout.wfText5.textTitle.text=getString(R.string.connection_speed)
// binding.networkLayout.wfText6.textTitle.text=getString(R.string.signal_strength)
// binding.networkLayout.wfText7.textTitle.text=getString(R.string.frequency)
// binding.networkLayout.wfText8.textTitle.text=getString(R.string.frequency_band)
// binding.networkLayout.wfText9.textTitle.text=getString(R.string.channel)
// binding.networkLayout.wfText10.textTitle.text=getString(R.string.standard)
private fun setWifiDetail() {
binding.noConnect.visibility=View.GONE
binding.conText1.text=getString(R.string.wifi)
binding.connectData.visibility=View.VISIBLE
binding.networkLayout.wifiList.visibility=View.VISIBLE
binding.networkLayout.llPubShow.visibility=View.VISIBLE
networkInfo.getWifiDetails()?.let { wifiDetails ->
Log.d("TTTTTTTT", (wifiDetails.signalLevelPercent?: "null").toString())
binding.strengthView.setStrength(wifiDetails.signalLevelPercent?: 0)
binding.conText2.text="${wifiDetails.ssid}·${wifiDetails.linkSpeedMbps}"
binding.conTExt3.text="${wifiDetails.signalLevelPercent} ${wifiDetails.rssi}"
if(wifiDetails.connected){
binding.networkLayout.wfText1.textContent.text=getString(R.string.connectivity_status)
}else{
binding.networkLayout.wfText1.textContent.text=getString(R.string.not_connected)
}
binding.networkLayout.wfText3.textContent.text=wifiDetails.bssid
binding.networkLayout.wfText4.textContent.text=wifiDetails.capabilities
binding.networkLayout.wfText5.textContent.text=wifiDetails.linkSpeedMbps.toString()
binding.networkLayout.wfText6.textContent.text=wifiDetails.signalLevelPercent.toString()
binding.networkLayout.wfText7.textContent.text=wifiDetails.frequency.toString()
binding.networkLayout.wfText8.textContent.text=wifiDetails.channel.toString()
binding.networkLayout.wfText10.textContent.text=wifiDetails.standard.toString()
}
}
companion object { companion object {
@JvmStatic @JvmStatic

View File

@ -56,9 +56,11 @@
android:orientation="horizontal" android:orientation="horizontal"
android:paddingVertical="30dp"> android:paddingVertical="30dp">
<ImageView <com.xyzshell.myphoneinfo.custom.SignalStrengthView
android:layout_width="wrap_content" android:id="@+id/strengthView"
android:layout_height="wrap_content" android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginStart="20dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:src="@mipmap/wifi"/> android:src="@mipmap/wifi"/>
@ -67,8 +69,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:layout_marginStart="50dp" android:layout_marginStart="30dp"
android:visibility="gone"> android:visibility="visible">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/conText1" android:id="@+id/conText1"
@ -105,8 +107,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:text="No connection" android:text="No connection"
android:layout_marginStart="50dp" android:layout_marginStart="30dp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
</LinearLayout> </LinearLayout>

View File

@ -61,9 +61,6 @@
android:text="@string/network" android:text="@string/network"
tools:ignore="RelativeOverlap" /> tools:ignore="RelativeOverlap" />
<include
android:id="@+id/wfText2"
layout="@layout/common_text_style" />
<include <include
android:id="@+id/wfText3" android:id="@+id/wfText3"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />
@ -82,9 +79,6 @@
<include <include
android:id="@+id/wfText8" android:id="@+id/wfText8"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />
<include
android:id="@+id/wfText9"
layout="@layout/common_text_style" />
<include <include
android:id="@+id/wfText10" android:id="@+id/wfText10"
layout="@layout/common_text_style" /> layout="@layout/common_text_style" />

View File

@ -104,9 +104,9 @@
<string name="dhcp">DHCP</string> <string name="dhcp">DHCP</string>
<string name="bssid">BSSID</string> <string name="bssid">BSSID</string>
<string name="function">Function</string> <string name="function">Function</string>
<string name="connection_speed">Connection Speed</string> <string name="connection_speed">Link speed</string>
<string name="frequency">Frequency</string> <string name="frequency">Frequency</string>
<string name="frequency_band">Frequency Band</string> <string name="frequency_band">Channel</string>
<string name="channel">Channel</string> <string name="channel">Channel</string>
<string name="standard">Standard</string> <string name="standard">Standard</string>
<string name="dhcp_server">DHCP Server</string> <string name="dhcp_server">DHCP Server</string>
@ -319,6 +319,8 @@
<string name="uwb_support">UWB support</string> <string name="uwb_support">UWB support</string>
<string name="nfc_support">NFC support</string> <string name="nfc_support">NFC support</string>
<string name="secure_nfc_support">Secure NFC support</string> <string name="secure_nfc_support">Secure NFC support</string>
<string name="connectivity_status">Connected</string>
<string name="not_connected">Not connected</string>
<string name="gps">GPS</string> <string name="gps">GPS</string>
</resources> </resources>