修改net
This commit is contained in:
parent
28fd0ec63f
commit
5ddc90b9ff
@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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
|
||||||
|
|||||||
@ -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:未连接,1:wifi 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
|
||||||
|
|||||||
@ -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>
|
||||||
|
|
||||||
|
|||||||
@ -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" />
|
||||||
|
|||||||
@ -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>
|
||||||
Loading…
Reference in New Issue
Block a user