Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में कोटलिन का उपयोग करके ब्रॉडकास्ट रिसीवर को प्रोग्रामेटिकली कैसे रजिस्टर करें?

प्रोग्रामेटिक ब्रॉडकास्ट रिसीवर पंजीकरण

यह उदाहरण दर्शाता है कि नेटवर्क कनेक्टिविटी परिवर्तनों को सुनने के लिए ब्रॉडकास्ट रिसीवर को कोड के माध्यम से (मैनिफेस्ट में घोषित किए बिना) कैसे पंजीकृत और अनपंजीकृत किया जाए।

चरण 1: नया प्रोजेक्ट बनाएं

एंड्रॉइड स्टूडियो में File → New Project चुनें।

चरण 2: लेआउट (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"> 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Tutorials Point"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" /> 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="ब्रॉडकास्ट रिसीवर डेमो"
        android:textColor="@android:color/holo_blue_dark"
        android:textSize="24sp" /> 
</RelativeLayout>

चरण 3: MainActivity.kt

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private val networkReceiver = NetworkChangeReceiver()
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
    }
    
    override fun onStart() {
        super.onStart()
        // नेटवर्क परिवर्तन के लिए इंटेंट फिल्टर बनाएं
        val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
        // रिसीवर पंजीकृत करें
        registerReceiver(networkReceiver, filter)
    }
    
    override fun onStop() {
        super.onStop()
        // मेमोरी लीक से बचने के लिए अनपंजीकृत करें
        unregisterReceiver(networkReceiver)
    }
}

// अलग क्लास में ब्रॉडकास्ट रिसीवर
class NetworkChangeReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (ConnectivityManager.CONNECTIVITY_ACTION == intent.action) {
            val noConnectivity = intent.getBooleanExtra(
                ConnectivityManager.EXTRA_NO_CONNECTIVITY, 
                false
            )
            
            val message = if (noConnectivity) "डिस्कनेक्टेड" else "कनेक्टेड"
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
        }
    }
}

चरण 4: AndroidManifest.xml (कोई विशेष अनुमति की आवश्यकता नहीं)

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="https://schemas.android.com/apk/res/android" 
    package="com.example.broadcastreceiver"> 
    <application 
        android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        android:label="@string/app_name" 
        android:roundIcon="@mipmap/ic_launcher_round" 
        android:supportsRtl="true" 
        android:theme="@style/AppTheme"> 
        <activity android:name=".MainActivity"> 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
    </application> 
</manifest>

⚠️ महत्वपूर्ण नोट (Android 7.0+):

Android 7.0 (API 24) से, CONNECTIVITY_ACTION ब्रॉडकास्ट को मैनिफेस्ट में घोषित रिसीवर के लिए नहीं भेजा जाता है, लेकिन प्रोग्रामेटिक रूप से पंजीकृत रिसीवर के लिए यह अभी भी काम करता है जब ऐप फोरग्राउंड में होता है।

आधुनिक विकल्प: ConnectivityManager.NetworkCallback

API 24+ के लिए, नेटवर्क परिवर्तनों को सुनने का अनुशंसित तरीका:

import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var connectivityManager: ConnectivityManager
    private val networkCallback = object : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network) {
            runOnUiThread { showToast("नेटवर्क उपलब्ध") }
        }
        override fun onLost(network: Network) {
            runOnUiThread { showToast("नेटवर्क खो गया") }
        }
        override fun onCapabilitiesChanged(network: Network, capabilities: NetworkCapabilities) {
            val hasInternet = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            runOnUiThread { showToast(if (hasInternet) "इंटरनेट कनेक्टेड" else "इंटरनेट नहीं") }
        }
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        connectivityManager = getSystemService(ConnectivityManager::class.java)
    }
    
    override fun onStart() {
        super.onStart()
        val request = NetworkRequest.Builder()
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build()
        connectivityManager.registerNetworkCallback(request, networkCallback)
    }
    
    override fun onStop() {
        super.onStop()
        connectivityManager.unregisterNetworkCallback(networkCallback)
    }
    
    private fun showToast(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
}

मुख्य अंतर:

ब्रॉडकास्ट रिसीवरNetworkCallback
सरल, लीगेसी APIआधुनिक, अधिक विश्वसनीय
सभी नेटवर्क परिवर्तनविशिष्ट क्षमताओं को फ़िल्टर कर सकता है
फोरग्राउंड तक सीमित (API 24+)बैकग्राउंड में भी काम करता है
  1. Android में ब्रॉडकास्ट रिसीवर के लिए कस्टम इंटेंट फिल्टर कैसे रजिस्टर करें? Android में ब्रॉडकास्ट रिसीवर के लिए कस्टम इंटेंट फिल्टर कैसे रजिस्टर करें?

    डायनामिक ब्रॉडकास्ट रिसीवर के साथ कस्टम इंटेंट फिल्टर इंटेंट फिल्टर Android को बताता है कि कौन से इंटेंट्स एक कंपोनेंट हैंडल कर सकता है। डायनामिक रजिस्ट्रेशन कोड में होता है (मैनिफेस्ट में नहीं), और onPause() में अनरजिस्टर करना जरूरी है। चरण 1: प्रोजेक्ट बनाएं Android Studio: File → New Project। च

  1. Android में BroadcastReceiver को प्रोग्रामेटिकली कैसे रजिस्टर करें? Android में BroadcastReceiver को प्रोग्रामेटिकली कैसे रजिस्टर करें?

    Android में प्रोग्रामेटिकली BroadcastReceiver रजिस्टर करना यह उदाहरण दर्शाता है कि Android ऐप में BroadcastReceiver को कोड के माध्यम से (प्रोग्रामेटिकली) कैसे रजिस्टर किया जाता है। यह दृष्टिकोण तब उपयोगी होता है जब आप रनटाइम पर डायनामिकली ब्रॉडकास्ट सुनना चाहते हैं, जैसे नेटवर्क कनेक्टिविटी परिवर्तन

  1. - Kotlin का उपयोग करके Android पर JSON ऑब्जेक्ट्स कैसे पार्स करें?

    परिचय यह उदाहरण दर्शाता है कि Kotlin का उपयोग करके Android पर JSON ऑब्जेक्ट्स कैसे पार्स किए जाएं। चरण 1: नया प्रोजेक्ट बनाएं Android Studio खोलें, File → New Project पर जाएं और आवश्यक विवरण भरकर एक नया प्रोजेक्ट बनाएं। चरण 2: activity_main.xml लेआउट जोड़ें res/layout/activity_main.xml में निम्न क