2013-02-05 20 views
5

मुझे यह पता लगाने की आवश्यकता है कि वायर्ड हेडसेट में प्लग किए गए माइक्रोफ़ोन हैं या नहीं।पता लगाएं कि हेडसेट में माइक्रोफ़ोन है

मैं जांच सकता हूं कि isWiredHeadSetOn() का उपयोग कर हेडसेट प्लग किया गया है, लेकिन माइक्रोफ़ोन के लिए ऑडियोमैनेजर क्लास में ऐसा कोई प्रतीत नहीं होता है।

मुझे ACTION_HEADSET_PLUG का उपयोग करके कुछ सुझाव मिल गए हैं, लेकिन मुझे इस एप्लिकेशन को जानने में दिलचस्पी है, भले ही हेडसेट को मेरे एप्लिकेशन को खोलने से पहले प्लग इन किया गया हो, यह कार्यक्रम मेरे ऐप के जीवनकाल में नहीं निकाला जाएगा।

इस मुद्दे के बारे में कोई विचार? पहले ही, आपका बहुत धन्यवाद।

+0

क्यों आप इसे ज़रूरत है? यह उपयोगकर्ता को यह जानने के लिए है कि माइक्रोफ़ोन – njzk2

+0

है क्योंकि मैं ऑडियो जैक के माध्यम से एक फ्लैश कनेक्ट करना चाहता हूं और इससे मुझे 2 प्रकार के फ्लैश के बीच अंतर करने में मदद मिलती है। – niculare

+1

ऑडियो सॉकेट में एक फ्लैश? हम वह कर सकते है ? – njzk2

उत्तर

12

अद्यतन: आगे बढ़ो और अपनी गतिविधि के onResume() में ACTION_HEADSET_PLUG रजिस्टर। यदि उपयोगकर्ता ने बूट-अप के बाद कभी भी हेडसेट प्लग इन/आउट किया है, तो प्लेटफ़ॉर्म आपके गतिविधि के लिए नवीनतम स्थिति को फिर से शुरू कर देगा।

परीक्षण कोड के बाद

काम किया:

package com.example.headsetplugtest; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 

public class HeadSetPlugIntentActivity extends Activity { 

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 
      if (Intent.ACTION_HEADSET_PLUG.equals(action)) { 
       Log.d("HeadSetPlugInTest", "state: " + intent.getIntExtra("state", -1)); 
       Log.d("HeadSetPlugInTest", "microphone: " + intent.getIntExtra("microphone", -1)); 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); 
     getApplicationContext().registerReceiver(mReceiver, filter); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     getApplicationContext().unregisterReceiver(mReceiver); 
    } 
} 
+0

धन्यवाद! मुझे नहीं पता था कि ऑनसेसिव() को गतिविधि शुरू होने पर भी कहा जाता है – niculare

+1

'FLAG_RECEIVER_REGISTERED_ONLY' प्रकार के डिवाइस कनेक्शन प्रसारण नहीं हैं? अर्थात। "जब प्रसारण केवल पंजीकृत रिसीवर भेजते हैं तो कहा जाएगा - कोई ब्रॉडकास्ट रिसीवर घटक लॉन्च नहीं किया जाएगा" - या डियान हैकबर्न द्वारा स्पष्ट रूप से वर्णित अनुसार: "यह केवल उन लोगों को दिया जाता है जो रजिस्टर रिसीवर को कॉल करते हैं, और प्रकटताओं में घोषित रिसीवर को नहीं भेजे जाते हैं।" – Michael

+0

@ माइकल, आप सही थे। ऊपर मेरा जवाब अपडेट किया गया। – ozbek