2012-07-31 11 views
14

मुझे पता है कि कोई एंड्रॉइड में बैक बटन कार्यक्षमता को ओवरराइट कर सकता है, लेकिन मैं सोच रहा था कि कोई विधि या कुछ भी है जिसे मैं कॉल कर सकता हूं जो हार्डवेयर बटन दबाकर काम करता है।हार्डवेयर बैक बटन प्रोग्रामेटिक रूप से कॉल करें?

उत्तर

21

आप इस

this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 

की तरह व्यवस्था करने के लिए वापस बटन प्रेस भेज सकते हैं या आप वापस बटन प्रेस को ओवरराइड और आपके गतिविधि पर

finish(); 

कॉल कर सकते हैं। यह मूल रूप से जेनेरिक बैक बटन जैसा ही काम करता है।

+0

को देखो मेरे कोड में काम नहीं करता ... मेरे ACTION_DOWN लिए इसे बदलने के लिए, और KEYCODE_BACK मौजूद नहीं है बताता है, मैं क्या आवश्यकता होगी उन्हें खोजने के लिए आयात करने के लिए? – JuiCe

+1

KeyEvent.ACTION_DOWN और KeyEvent.KEYCODE_BACK का उपयोग करने का प्रयास करें :) – jimmithy

+0

धन्यवाद आप दोनों बहुत धन्यवाद। – JuiCe

12

गतिविधि में this.onBackPressed(); पर कॉल करें।

+0

यह एक अच्छा जवाब है। – VSG24

+1

यह एक सबसे अच्छा जवाब है, क्योंकि केवल कॉलिंग फिनिश ट्रिगर नहीं होता है वास्तविक बैक बटन की तरह बैकप्रेस किया जाता है। यदि गतिविधि अतिरिक्त सामान कर रही है तो इसे याद किया जाएगा। – Andrew

+0

लेकिन जैसे गतिविधि पर कोई संवाद है तो यह गतिविधि बंद कर देगा, और वास्तविक बटन ऐसा नहीं करता है। – NehaK

0

तुम सिर्फ "प्रेस" हार्डवेयर बटन चाहते हैं, बनाने सेवा AccessibilityService से बढ़ाया:

class ExampleAccessService:AccessibilityService() { 
    override fun onInterrupt() { 
    } 

    override fun onAccessibilityEvent(event: AccessibilityEvent?) { 
    } 

    fun doAction(){ 
     performGlobalAction(GLOBAL_ACTION_RECENTS) 
//  performGlobalAction(GLOBAL_ACTION_BACK) 
//  performGlobalAction(GLOBAL_ACTION_HOME) 
//  performGlobalAction(GLOBAL_ACTION_NOTIFICATIONS) 
//  performGlobalAction(GLOBAL_ACTION_POWER_DIALOG) 
//  performGlobalAction(GLOBAL_ACTION_QUICK_SETTINGS) 
//  performGlobalAction(GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN) 
    } 
} 

कॉल doAction() जहाँ आप चाहते हैं कार्रवाई

Manifest में जोड़ें:

<application 
... 
    <service 
     android:name=".ExampleAccessService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:label="Name of servise" // it will be viewed in Settings->Accessibility->Services 
     android:enabled="true" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService"/> 
     </intent-filter> 
     <meta-data 
      android:name="android.accessibilityservice" 
      android:resource="@xml/accessibility_service_config"/> 
    </service> 
... 
</application> 

accessibili ty_service_config.xml:

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accessibilityEventTypes="typeAllMask" 
    android:accessibilityFeedbackType="feedbackAllMask" 
    android:accessibilityFlags="flagDefault" 
    android:canRetrieveWindowContent="false" 
    android:description="your description" 
    android:notificationTimeout="100" 
    android:packageNames="your app package, ex: ex: com.example.android" 
    android:settingsActivity="your settings activity ex: com.example.android.MainActivity" /> 

अधिक जानकारी के लिए https://developer.android.com/guide/topics/ui/accessibility/services.html

संबंधित मुद्दे