2017-03-06 6 views
11

मुझे वर्तमान में उस पल को कैप्चर करने की आवश्यकता है जब आउटगोइंग कॉल बजने लगती है। Abeer Ahmad के अनुसार "How to identify the ringing state of outgoing call in android" में, एक समाधान Visualizer class का उपयोग कर उत्सर्जित ध्वनि (0 से लेकर मूल्य के अनुरूप मूल्य) के आवृत्ति परिवर्तन का पता लगाने के लिए होगा। हालांकि, जब मैं कॉल करता हूं तो 0 (मौन) के अलावा कोई आवृत्ति मूल्य नहीं मिलता है। यह तब होता है जब मोबाइल एक और ध्वनि उत्सर्जित करता है, जैसे ऑडियो ट्रैक का पुनरुत्पादन, जहां आवृत्ति मानों का पता लगाया जाता है। क्या कोई मेरी मदद कर सकता है, या मुझे वैकल्पिक समाधान दे सकता है?विज़ुअलाइज़र क्लास का उपयोग करके एंड्रॉइड में आउटगोइंग कॉल रिंग का पता लगाने के लिए कैसे?

mVisualizer = new Visualizer(0); 
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 
Visualizer.OnDataCaptureListener listener = new Visualizer.OnDataCaptureListener(){ 
        @Override 
        public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { } 
        @Override 
        public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { 
         for (int i=0;i<bytes.length;i++) { 
          if (bytes[i] != 0) { 
           Log.i("INFO","FREQUENCY:"+bytes[i]); 
           break; 
          } 
         } 
        } 
       }; 
mVisualizer.setDataCaptureListener(listener, Visualizer.getMaxCaptureRate()/2, true, true); 

मैं एंड्रॉयड जेलीबीन (एपीआई 17) का उपयोग कर रहा:

यहाँ मेरी कोड है।

उत्तर

1

कॉलिंग new Visualizer(0); स्ट्रीम 0, मिश्रित आउटपुट को सुनता है।

मुद्दे में कॉल ऑडियो के रूप में this Google Bug पर संकेत दिया है ताकि आप सही स्ट्रीम अपने आप को खोजने की जरूरत है मिश्रित उत्पादन में मौजूद हमेशा नहीं है। हालांकि, मुझे ऐसा करने का एक आसान तरीका नहीं मिला है।

मीडियाप्लेयर का उपयोग गैर-सार्वजनिक स्नूप विधि होता था जिसका उपयोग किया जा सकता था लेकिन इसे हाल के संस्करणों से हटा दिया गया था। एक लंबे शॉट आप की कोशिश कर सकते एक ही धारा पर एक ऑडियो ट्रैक बनाने और उस सत्र आईडी सुन रहा है:

AudioTrack track = new AudioTrack(AudioManager.STREAM_VOICE_CALL, aSampleRate, 
     AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 
     aBuffersize, AudioTrack.MODE_STREAM); 

आप भी अपनी विजुआलाइज़र शुरू करने से पहले audioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true); बुला की कोशिश कर सकते। सिद्धांत रूप में STREAM_VOICE_CALL ऑडियो बनाने के लिए अनुमति देने वाला एकमात्र सत्र बन जाएगा, इसे विज़ुअलाइज़र के परिणामों को प्रभावित करना चाहिए।

नोट: यदि आप AudioManager sources में generAudioSessionId देखते हैं तो आप देखेंगे कि यह मूल ऑडियो सिस्टम क्लास का उपयोग करता है। मैं सुझाव दूंगा कि इस वर्ग तक पहुंचने के लिए एनडीके का उपयोग करना संभव है और वर्तमान ऑडियो सत्र आईडी

+0

सहायता के लिए धन्यवाद, लेकिन आपके उत्तरों में से कोई भी समस्या का समाधान नहीं करता है। मैंने आपकी सिफारिशों के साथ प्रयास किया और मुझे अभी भी आवृत्ति = 0. मिल रहा है यह बहुत अजीब है। मुझे लगता है कि इस समस्या का समाधान मौजूद नहीं है। –

+0

मैंने खुद को खोजा - कोई समाधान नहीं है, यही कारण है कि मुझे रूचि थी (आपके जैसे 4 अन्य अनुत्तरित प्रश्न हैं)। ऐसा लगता है कि Google ने सुरक्षा उद्देश्यों के लिए सभी ऑडियो सत्र आईडी तक पहुंचने का कोई तरीका नहीं दिया है –

+0

मैंने इस विषय के बारे में भी शोध किया है और आपके मुकाबले उसी निष्कर्ष तक पहुंच गया है। मैंने इस सवाल को प्रकाशित किया कि किसी के लिए इस मुद्दे के लिए "जादुई" या वैकल्पिक समाधान पता हो सकता है। मैं वास्तव में एंड्रॉइड एपीआई में इस कार्यक्षमता को अनुमति देने के लिए "सुरक्षा समस्या" को समझ नहीं पा रहा हूं, क्योंकि इसका कारण वर्तमान अनुमति तंत्र के साथ आसानी से प्रबंधित किया जा सकता है। यह शर्म की बात है और मुझे आशा है कि जल्द ही इसे हासिल करने का एक तरीका दिखाई देगा। वैसे भी, आपकी मदद के लिए फिर से धन्यवाद। सम्मान। –

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