在当今以信息为中心的网络联盟中,开发人员需要了解用户通过Internet进行的网络搜索的类型。为了以特定的数据作为目标受众,开发人员需要拥有并处理大量的实体。这样的实体之一就是连接信息。您是否曾注意到Google Play在您尝试通过移动数据下载App时要求您切换到Wi-Fi吗?从Wi-Fi切换到移动数据时,您是否曾见过在线视频质量下降的消息?道德规范说,监视所有应用程序中使用的每个实体都是至关重要的,而Android能够做到这一点。 Android体系结构在这里的作用是在网络出现故障时将您从一种连接类型切换到另一种可能的连接类型,但不会更改所显示数据的规格。开发人员必须以优化消耗数据的方式对应用程序进行编程。通过本文,我们旨在扩展我们提取当前连接类型的知识,并以Android应用程序的形式显示它。我们将使用可用的方法(无第三方元素)实时显示信息(连接类型)的变化。下面的样本GIF给出得到什么我们将在本文中做的想法。请注意,我们将使用Kotlin语言实施此项目。
方法
要获取Android中的当前连接类型(Wi-Fi或移动数据),我们应遵循以下步骤:
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:使用AndroidManifest.xml文件
转到AndroidManifest.xml文件并添加以下使用权限: ACCESS_NETWORK_STATE 。
以下是AndroidManifest.xml文件的完整代码。
XML
XML
Kotlin
import android.content.Context
import android.net.ConnectivityManager
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Declaring the textView from the layout file
// This textView will display the type of connection
// Either WIFI, MOBILE DATA, or Not Connected
val networkConnectionStatus = findViewById(R.id.tv)
// A Thread that will continuously monitor the Connection Type
Thread(Runnable {
while (true) {
// This string is displayed when device is not connected
// to either of the aforementioned states
var conStat: String = "Not Connected"
// Invoking the Connectivity Manager
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
// Fetching the Network Information
val netInfo = cm.allNetworkInfo
// Finding if Network Info typeName is WIFI or MOBILE (Constants)
// If found, the conStat string is supplied WIFI or MOBILE DATA
// respectively. The supplied data is a Variable
for (ni in netInfo) {
if (ni.typeName.equals("WIFI", ignoreCase = true))
if (ni.isConnected) conStat = "WIFI"
if (ni.typeName.equals("MOBILE", ignoreCase = true))
if (ni.isConnected) conStat = "MOBILE DATA"
}
// To update the layout elements in real-time, use runOnUiThread method
// We are setting the text in the TextView as the string conState
runOnUiThread {
networkConnectionStatus.text = conStat
}
}
}).start() // Starting the thread
}
}
步骤3:使用activity_main.xml文件
现在转到代表应用程序UI的activity_main.xml文件,并创建一个TextView,我们将在其中广播MainActivity.kt文件中的信息。以下是activity_main.xml文件的代码。
XML格式
步骤4:使用MainActivity.kt文件
转到MainActivity.kt文件,并参考以下代码。下面是MainActivity.kt文件的代码。在代码内部添加了注释,以更详细地了解代码。
科特林
import android.content.Context
import android.net.ConnectivityManager
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Declaring the textView from the layout file
// This textView will display the type of connection
// Either WIFI, MOBILE DATA, or Not Connected
val networkConnectionStatus = findViewById(R.id.tv)
// A Thread that will continuously monitor the Connection Type
Thread(Runnable {
while (true) {
// This string is displayed when device is not connected
// to either of the aforementioned states
var conStat: String = "Not Connected"
// Invoking the Connectivity Manager
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
// Fetching the Network Information
val netInfo = cm.allNetworkInfo
// Finding if Network Info typeName is WIFI or MOBILE (Constants)
// If found, the conStat string is supplied WIFI or MOBILE DATA
// respectively. The supplied data is a Variable
for (ni in netInfo) {
if (ni.typeName.equals("WIFI", ignoreCase = true))
if (ni.isConnected) conStat = "WIFI"
if (ni.typeName.equals("MOBILE", ignoreCase = true))
if (ni.isConnected) conStat = "MOBILE DATA"
}
// To update the layout elements in real-time, use runOnUiThread method
// We are setting the text in the TextView as the string conState
runOnUiThread {
networkConnectionStatus.text = conStat
}
}
}).start() // Starting the thread
}
}
输出:在物理设备上运行
注意:拥有活动的网络接口并不能保证您可以使用特定的网络服务。网络问题,服务器停机时间,信号不足,门户网站受限,内容过滤器等都可能阻止您的应用到达服务器。例如,在应用程序收到来自Twitter服务的有效响应调用之前,您无法确定您的应用程序是否可以与Twitter服务器联系。