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

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

एंड्रॉइड में AlarmManager कार्यान्वयन

यह उदाहरण दर्शाता है कि AlarmManager का उपयोग करके निर्धारित समय पर अलार्म कैसे सेट किया जाए, जो डिवाइस स्लीप मोड में भी काम करता है।

चरण 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"
    android:padding="16dp"
    tools:context=".MainActivity"> 
    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" /> 
    <Button
        android:id="@+id/buttonAlarm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/timePicker"
        android:layout_centerInParent="true"
        android:layout_marginTop="20dp"
        android:text="अलार्म सेट करें" /> 
</RelativeLayout>

चरण 3: MainActivity.kt

import android.app.AlarmManager
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TimePicker
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.util.Calendar

class MainActivity : AppCompatActivity() {
    private lateinit var btnSetAlarm: Button
    private lateinit var timePicker: TimePicker
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        
        timePicker = findViewById(R.id.timePicker)
        btnSetAlarm = findViewById(R.id.buttonAlarm)
        
        // 24 घंटे प्रारूप सेट करें
        timePicker.is24HourView = true
        
        btnSetAlarm.setOnClickListener {
            val calendar = Calendar.getInstance().apply {
                // वर्तमान तारीख सेट करें
                set(Calendar.YEAR, calendar.get(Calendar.YEAR))
                set(Calendar.MONTH, calendar.get(Calendar.MONTH))
                set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH))
                
                // TimePicker से समय प्राप्त करें (API 23+)
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    set(Calendar.HOUR_OF_DAY, timePicker.hour)
                    set(Calendar.MINUTE, timePicker.minute)
                } else {
                    @Suppress("DEPRECATION")
                    set(Calendar.HOUR_OF_DAY, timePicker.currentHour)
                    @Suppress("DEPRECATION")
                    set(Calendar.MINUTE, timePicker.currentMinute)
                }
                set(Calendar.SECOND, 0)
                set(Calendar.MILLISECOND, 0)
            }
            
            // यदि समय बीत चुका है, तो अगले दिन के लिए सेट करें
            if (calendar.timeInMillis <= System.currentTimeMillis()) {
                calendar.add(Calendar.DAY_OF_MONTH, 1)
            }
            
            setAlarm(calendar.timeInMillis)
        }
    }
    
    private fun setAlarm(timeInMillis: Long) {
        val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val intent = Intent(this, AlarmReceiver::class.java)
        
        // FLAG_IMMUTABLE Android 12+ के लिए आवश्यक
        val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            PendingIntent.FLAG_IMMUTABLE
        } else {
            0
        }
        
        val pendingIntent = PendingIntent.getBroadcast(this, 0, intent, flags)
        
        // दैनिक दोहराने वाला अलार्म सेट करें
        alarmManager.setRepeating(
            AlarmManager.RTC_WAKEUP,  // डिवाइस को जगाता है
            timeInMillis,
            AlarmManager.INTERVAL_DAY,
            pendingIntent
        )
        
        Toast.makeText(this, "अलार्म सेट: ${formatTime(timeInMillis)}", Toast.LENGTH_SHORT).show()
    }
    
    private fun formatTime(millis: Long): String {
        return android.text.format.DateFormat.format("hh:mm a, dd MMM", millis).toString()
    }
}

// अलग फ़ाइल में होना चाहिए: AlarmReceiver.kt
class AlarmReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        Log.d("AlarmBell", "अलार्म अभी बजा!")
        // यहां नोटिफिकेशन, ध्वनि, या अन्य कार्य करें
        Toast.makeText(context, "⏰ अलार्म बज रहा है!", Toast.LENGTH_LONG).show()
    }
}

चरण 4: AndroidManifest.xml (रिसीवर घोषित करें)

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="https://schemas.android.com/apk/res/android" 
    package="com.example.alarmmanager"> 
    
    <!-- Android 12+ के लिए सटीक अलार्म अनुमति -->
    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
    
    <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> 
        
        <!-- ब्रॉडकास्ट रिसीवर घोषित करें -->
        <receiver 
            android:name=".AlarmReceiver"
            android:exported="false" /> 
            
    </application> 
</manifest>

महत्वपूर्ण विचार:

  • RTC_WAKEUP: डिवाइस को स्लीप से जगाकर अलार्म डिलीवर करता है
  • setRepeating vs setExact: API 19+ में setRepeating अनइक्सैक्ट होता है; सटीक समय के लिए setExactAndAllowWhileIdle + पुनर्निर्धारण का उपयोग करें
  • FLAG_IMMUTABLE: Android 12 (API 31)+ के लिए PendingIntent में अनिवार्य
  • SCHEDULE_EXACT_ALARM: Android 12+ पर सटीक अलार्म के लिए अनुमति आवश्यक
  • बूट के बाद पुनर्स्थापित: डिवाइस रीबूट के बाद अलार्म पुनर्स्थापित करने के लिए BOOT_COMPLETED रिसीवर जोड़ें

बूट के बाद अलार्म पुनर्स्थापित करने के लिए:

<receiver android:name=".BootReceiver" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  1. Android TextInputLayout कैसे लागू करें Android TextInputLayout कैसे लागू करें

    Android TextInputLayout लागू करना: पूर्ण गाइड उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में TextInputLayout क्या है। TextInputLayout, LinearLayout द्वारा विस्तारित है। यह एडिट टेक्स्ट के लिए एक रैपर के रूप में कार्य करता है और एडिट टेक्स्ट के लिए फ्लोटिंग हिंट एनिमेशन दिखाता है। यह उद

  1. Android Pull-to-Refresh कैसे लागू करें? Android Pull-to-Refresh कैसे लागू करें?

    Android Pull-to-Refresh (Swipe-to-Refresh) लागू करना उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में Pull to Refresh लेआउट क्या है। हम Android में Pull to Refresh को Swipe-to-Refresh कह सकते हैं। जब आप स्क्रीन को ऊपर से नीचे की ओर स्वाइप करते हैं तो यह setOnRefreshListener के आधार पर कुछ

  1. Android में AlarmManager का उपयोग कैसे करें? Android में AlarmManager का उपयोग कैसे करें?

    AlarmManager से अलार्म सेट करना यह उदाहरण Kotlin में AlarmManager का उपयोग करके निर्धारित समय पर रिपीटिंग अलार्म सेट करना दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं (Kotlin) Android Studio में File → New Project चुनें और भाषा Kotlin चुनें। चरण 2: लेआउट (activity_main.xml) <?xml version=1.0 encoding