This commit is contained in:
Ваше Имя
2025-09-24 14:01:30 +04:00
parent b2f1553554
commit a4a51b7966
3 changed files with 40 additions and 57 deletions
+1 -2
View File
@@ -2,8 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<application <application
android:allowBackup="true" android:allowBackup="true"
@@ -1,63 +1,53 @@
package com.example.myapplication package com.example.myapplication
import android.Manifest import android.net.ConnectivityManager
import android.content.pm.PackageManager import android.net.Network
import android.net.NetworkCapabilities
import android.os.Bundle import android.os.Bundle
import android.widget.Button import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.getSystemService
import androidx.core.content.ContextCompat
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
// Запрос разрешения на контакты private lateinit var tvStatus: TextView
private val requestContactsPermission = registerForActivityResult( private lateinit var connectivityManager: ConnectivityManager
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
Toast.makeText(this, "Доступ к контактам разрешён", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Доступ к контактам запрещён", Toast.LENGTH_SHORT).show()
}
}
// Запрос разрешения на галерею
private val requestGalleryPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
Toast.makeText(this, "Доступ к галерее разрешён", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Доступ к галерее запрещён", Toast.LENGTH_SHORT).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
val btnContacts = findViewById<Button>(R.id.btnContacts) tvStatus = findViewById(R.id.tvNetworkStatus)
val btnGallery = findViewById<Button>(R.id.btnGallery) connectivityManager = getSystemService()!!
// При нажатии на кнопку "Контакты" // Проверяем сеть при старте
btnContacts.setOnClickListener { updateNetworkStatus()
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
== PackageManager.PERMISSION_GRANTED) { // Подписываемся на изменения сети
Toast.makeText(this, "Уже есть доступ к контактам", Toast.LENGTH_SHORT).show() connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {
} else { override fun onAvailable(network: Network) {
requestContactsPermission.launch(Manifest.permission.READ_CONTACTS) runOnUiThread {
tvStatus.text = "Сеть доступна"
Toast.makeText(this@MainActivity, "Подключение появилось", Toast.LENGTH_SHORT).show()
} }
} }
// При нажатии на кнопку "Галерея" override fun onLost(network: Network) {
btnGallery.setOnClickListener { runOnUiThread {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES) tvStatus.text = "Сеть недоступна"
== PackageManager.PERMISSION_GRANTED) { Toast.makeText(this@MainActivity, "Подключение потеряно", Toast.LENGTH_SHORT).show()
Toast.makeText(this, "Уже есть доступ к галерее", Toast.LENGTH_SHORT).show()
} else {
requestGalleryPermission.launch(Manifest.permission.READ_MEDIA_IMAGES)
} }
} }
})
}
// Проверка текущего состояния сети
private fun updateNetworkStatus() {
val network = connectivityManager.activeNetwork
val caps = connectivityManager.getNetworkCapabilities(network)
val connected = caps?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) == true
tvStatus.text = if (connected) "Сеть доступна" else "Сеть недоступна"
} }
} }
+4 -10
View File
@@ -4,16 +4,10 @@
android:orientation="vertical" android:orientation="vertical"
android:padding="16dp"> android:padding="16dp">
<Button <TextView
android:id="@+id/btnContacts" android:id="@+id/tvNetworkStatus"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Доступ к контактам" /> android:text="Проверка сети..."
android:textSize="18sp" />
<Button
android:id="@+id/btnGallery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Доступ к галерее" />
</LinearLayout> </LinearLayout>