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

Android में 5 सेकंड यूजर इनएक्टिविटी कैसे डिटेक्ट करें?

यह उदाहरण दर्शाता है कि Handler और onUserInteraction() का उपयोग करके Android में यूजर इनएक्टिविटी (कोई टच/की इवेंट नहीं) को कैसे डिटेक्ट किया जाता है।

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

Android Studio में File → New Project।

चरण 2: लेआउट XML

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="https://schemas.android.com/apk/res/android" 
    xmlns:app="https://schemas.android.com/apk/res-auto" 
    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:text="स्क्रीन पर टच करें - 5 सेकंड इनएक्टिविटी पर टोस्ट दिखेगा" 
        android:textSize="18sp" 
        android:padding="16dp" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintLeft_toLeftOf="parent" 
        app:layout_constraintRight_toRightOf="parent" 
        app:layout_constraintTop_toTopOf="parent" /> 
</androidx.constraintlayout.widget.ConstraintLayout>

चरण 3: MainActivity.java

package com.app.sample; 
import androidx.appcompat.app.AppCompatActivity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Looper; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 
    private Handler handler; 
    private Runnable inactivityRunnable; 
    private static final long INACTIVITY_TIMEOUT_MS = 5000; // 5 सेकंड 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        
        handler = new Handler(Looper.getMainLooper()); 
        inactivityRunnable = () -> { 
            Toast.makeText(MainActivity.this, "यूजर 5 सेकंड से इनएक्टिव है", Toast.LENGTH_SHORT).show(); 
            // यहां लॉगआउट, स्क्रीन लॉक आदि एक्शन ले सकते हैं 
        }; 
        
        startInactivityTimer(); 
    } 
    
    @Override 
    public void onUserInteraction() { 
        super.onUserInteraction(); 
        // किसी भी यूजर इंटरैक्शन (टच, की, ट्रैकबॉल) पर टाइमर रीसेट करें
        resetInactivityTimer(); 
    } 
    
    private void startInactivityTimer() { 
        handler.postDelayed(inactivityRunnable, INACTIVITY_TIMEOUT_MS); 
    } 
    
    private void resetInactivityTimer() { 
        handler.removeCallbacks(inactivityRunnable); 
        startInactivityTimer(); 
    } 
    
    @Override 
    protected void onDestroy() { 
        super.onDestroy(); 
        handler.removeCallbacks(inactivityRunnable); // लीक रोकें 
    } 
    
    @Override 
    protected void onPause() { 
        super.onPause(); 
        handler.removeCallbacks(inactivityRunnable); // बैकग्राउंड में टाइमर रोकें 
    } 
    
    @Override 
    protected void onResume() { 
        super.onResume(); 
        startInactivityTimer(); // फोरग्राउंड में टाइमर शुरू करें 
    } 
}

महत्वपूर्ण सुधार

  • मूल कोड में टोस्ट मैसेज "5 minutes" कहता था लेकिन टाइमर 5 सेकंड का था - ठीक किया गया
  • Looper.getMainLooper() के साथ Handler बनाएं (डिप्रिकेटेड कंस्ट्रक्टर से बचें)
  • onPause/onResume में टाइमर मैनेज करें ताकि बैकग्राउंड में न चले
  • onDestroy में कॉलबैक हटाकर मेमोरी लीक रोकें

मॉडर्न अल्टरनेटिव: LifecycleObserver

// Lifecycle-aware कंपोनेंट के लिए 
public class InactivityTracker implements DefaultLifecycleObserver { 
    private Handler handler = new Handler(Looper.getMainLooper()); 
    private Runnable runnable; 
    
    @Override 
    public void onResume(@NonNull LifecycleOwner owner) { startTimer(); } 
    @Override 
    public void onPause(@NonNull LifecycleOwner owner) { stopTimer(); } 
    @Override 
    public void onDestroy(@NonNull LifecycleOwner owner) { stopTimer(); } 
    
    public void onUserInteraction() { resetTimer(); } 
    // ... टाइमर मेथड्स 
}

चरण 4: AndroidManifest.xml

मानक मैनिफेस्ट।

ऐप चलाएं

डिवाइस कनेक्ट करें, Run करें। 5 सेकंड तक स्क्रीन न छुएं - "यूजर 5 सेकंड से इनएक्टिव है" टोस्ट दिखेगा।

Android में 5 सेकंड यूजर इनएक्टिविटी कैसे डिटेक्ट करें?

  1. Android ऐप में शेक इवेंट का पता कैसे लगाएं? Android ऐप में शेक इवेंट का पता कैसे लगाएं?

    Android में शेक इवेंट डिटेक्शन का पूरा गाइड यह ट्यूटोरियल आपको दिखाएगा कि Android ऐप में एक्सेलेरोमीटर सेंसर का उपयोग करके शेक जेस्चर का पता कैसे लगाया जाता है। यह फीचर गेमिंग ऐप्स, म्यूजिक प्लेयर्स या किसी भी ऐसे ऐप के लिए उपयोगी हो सकता है जहां यूजर इंटरैक्शन के लिए फिजिकल शेक का उपयोग किया जाता ह

  1. एंड्रॉइड ऐप के SharedPreferences डेटा कैसे डिलीट करें एंड्रॉइड ऐप के SharedPreferences डेटा कैसे डिलीट करें

    SharedPreferences से विशिष्ट कुंजियाँ या पूरा डेटा हटाने के तरीके एंड्रॉइड में SharedPreferences डेटा हटाने के कई तरीके हैं: विशिष्ट कुंजी हटाना, सभी डेटा साफ करना, या डिफ़ॉल्ट वैल्यूज पर रीसेट करना। यह उदाहरण सभी विधियों को दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में प्रोजेक्ट बनाएं।

  1. एंड्रॉइड में ऑडियो/रिंगर मोड कैसे डिटेक्ट करें एंड्रॉइड में ऑडियो/रिंगर मोड कैसे डिटेक्ट करें

    AudioManager का उपयोग करके डिवाइस का रिंगर मोड (साइलेंट, वाइब्रेट, नॉर्मल) जांचना एंड्रॉइड में AudioManager सिस्टम सर्विस के माध्यम से वर्तमान रिंगर मोड का पता लगाया जा सकता है। यह ऐप्स को यूजर की साउंड प्राथमिकताओं के अनुसार व्यवहार समायोजित करने की अनुमति देता है (जैसे: गेम में साउंड म्यूट करना यद