修改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
}
private val inactiveColor = "#eeeeee".toColorInt()
private val activeColor = "#1E8C29".toColorInt()
private val inactiveColor = "#B7D7D3".toColorInt()
private val activeColor = "#3B948A".toColorInt()
private var strengthLevel: Int = 0
private val maxBars = 5

View File

@ -1,17 +1,23 @@
package com.xyzshell.myphoneinfo.dashboard
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
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.custom.PermissionChecker
import com.xyzshell.myphoneinfo.databinding.FragmentNetworkBinding
import com.xyzshell.myphoneinfo.dialog.ShowLoadFragment
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
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -30,16 +36,45 @@ private lateinit var binding:FragmentNetworkBinding
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
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.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.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.wfText8.textTitle.text=getString(R.string.channel)
binding.networkLayout.wfText10.textTitle.text=getString(R.string.standard)
//dhcp
@ -69,20 +104,6 @@ private lateinit var binding:FragmentNetworkBinding
binding.simText3.textTitle.text=getString(R.string.roaming)
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{
val tag = "showLoadFragment"
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 {
@JvmStatic

View File

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

View File

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

View File

@ -104,9 +104,9 @@
<string name="dhcp">DHCP</string>
<string name="bssid">BSSID</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_band">Frequency Band</string>
<string name="frequency_band">Channel</string>
<string name="channel">Channel</string>
<string name="standard">Standard</string>
<string name="dhcp_server">DHCP Server</string>
@ -319,6 +319,8 @@
<string name="uwb_support">UWB support</string>
<string name="nfc_support">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>
</resources>