2011-06-14 8 views
20

पर डीटीएमएफ टोन भेजना मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसके लिए मेरे ऐप को सक्रिय कॉल के दौरान वॉयस की अपलिंक आवृत्ति पर डीटीएमएफ टोन भेजने में सक्षम होना आवश्यक है।अपलिंक इन-कॉल

मेरे 2 शर्तें हैं:

  • हम एक स्वनिर्धारित एंड्रॉयड प्लेटफॉर्म का उपयोग नहीं करते
  • हम फोन

मैं कई दिनों के खर्च किया है मेरी कर जड़ की जरूरत नहीं है गृहकार्य और मुझे पता है कि डीटीएमएफ भेजने में इन-कॉल वर्तमान एसडीके/मानक एपीआई द्वारा समर्थित नहीं है। हालांकि, com.android.internal.telephony में प्रासंगिक कक्षाओं का उपयोग करके मैं इस बात की नकल करने की उम्मीद कर रहा हूं कि मूल फोन ऐप यह कैसे करता है। मैंने this site on how to use internal APIs for standard 3rd party apps का पालन किया।

मैंने एंड्रॉइड ओएस देव पर्यावरण के साथ खुद को भी स्थापित किया है और अपने आंतरिक कार्यों को समझने के लिए एक एमुलेटर पर डीबग मोड में फोन ऐप चलाने में सक्षम हूं।

मैं एक शेयर मानक एमुलेटर पर विभिन्न तरीकों की कोशिश की लेकिन त्रुटियों मुझे मिल रहे थे:

  1. android.uid.phone की sharedUserId का उपयोग कर Phone.apk के स्रोत के आधार पर एक नाम बदली एप्लिकेशन इंस्टॉल करने की कोशिश कर के बाद, मुझे मिला:

    Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

    इस तथ्य के कारण मेरे पास साइन इन करने के लिए सिस्टम प्रमाण नहीं है।

  2. फ़ोन.एपीके के स्रोत से संबंधित डीटीएमएफ टोन कोड भेजने के आधार पर कस्टम ऐप लिखने का प्रयास करने के बाद, मुझे फोनफैक्टरी स्थापित करने में निम्न त्रुटि मिलती है;

    java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.provider.Telephony.SPN_STRINGS_UPDATED.

    कोई संदेह नहीं है इस तथ्य की वजह मेरे ऐप सही अनुमति नहीं है, हालांकि AndroidManifest.xml Phone.apk के रूप में ही अनुमति के साथ सेटअप है।

मुझे नुकसान हुआ है कि मैं और क्या प्रयास कर सकता हूं। क्या किसी के पास कोई सुझाव है?

अग्रिम धन्यवाद, साइमन।

उत्तर

8

आपने एक दिलचस्प दृष्टिकोण लिया है, और मैं आपके प्रयासों की सराहना करता हूं। दुर्भाग्यवश, कुछ आरक्षित आंतरिक विशेषाधिकार हैं (जाहिर है, जैसे SPN_STRINGS_UPDATED) कि आपको ऐप डेवलपर के रूप में उपयोग करने की अनुमति नहीं है, जो इस दृष्टिकोण को कम या ज्यादा तोड़ देता है। आप कोड के क्षेत्र को हटाने का प्रयास कर सकते हैं, लेकिन मुझे काफी यकीन है कि आप अवरुद्ध समस्या में भाग लेंगे।

इसलिए, मुझे डर है कि इस समय यह संभव नहीं है। मौजूदा फोन कॉल पर डीटीएमएफ टन भेजने के लिए an open feature request on Android है, लेकिन यह लगभग दो वर्षों तक निष्क्रिय रहा है।

मैं समझता हूँ कि यह आपकी समस्या का समाधान नहीं है, लेकिन ध्यान दें कि आप DTMF टोन एक नंबर डायल करने के बाद सीधे भेज सकते हैं ले:

Intent i = new Intent("android.intent.action.CALL", 
         Uri.parse("tel://" + number + "," + dtmfTones)); 
5

सीधे शब्दों में कहें, तो आप बिना यह करने के लिए सक्षम नहीं होगा कम से कम फ़ोन ऐप को अनुकूलित करना, जिसे मॉडेम तक पहुंचने के लिए सिस्टम उपयोगकर्ता के रूप में चलाने के लिए है। ऐसा करने के लिए, आपको अपने फोन को रूट करना होगा।

अपनी आवश्यकताओं को पूरा करने के लिए एंड्रॉइड मंच को बढ़ाने का एकमात्र संभावित समाधान है। हम सिर्फ इतना है कि ऐसा ही किया और पहले से ही AOSP परियोजना के लिए हमारी पैच में भेजा:

https://android-review.googlesource.com/32820

https://android-review.googlesource.com/32821

हम वर्तमान की समीक्षा करने और हमारे योगदान को स्वीकार करने के लिए गूगल डेवलपर्स के लिए इंतजार कर रहे हैं। यदि आप रुचि रखते हैं, तो कृपया Google को विभिन्न एओएसपी सूचियों (एंड्रॉइड-कॉन्ट्रिब, एंड्रॉइड-प्लेटफार्म) पर जानकारी दें। उम्मीद है कि समीक्षा में तेजी आएगी।

शुभकामनाओं सहित, गेर्गेले

+0

अरे, क्या इस सुविधा की स्थिति में कोई बदलाव है? क्या मैं मदद कर सकता हूँ? मैंने एएसओपी साइट पर मतदान करने के लिए यह समझने की कोशिश की .. लेकिन मैंने छोड़ दिया। मैं यह भी समझ नहीं पाया कि क्या यह सुविधा स्वीकार की गई थी या बस अटक गई थी? इसकी स्थिति क्या है? –

+0

नवीनतम पैच सेट अस्वीकार कर दिया गया था क्योंकि यह एओएसपी मास्टर पर विलय नहीं करता है। यह अच्छा होगा अगर कोई और इसे उठा सकता है, इसे फिर से भरें और इसे एक नया पैच सेट सबमिट करें। –

1

एक सक्रिय कॉल के दौरान DTMF टोन नहीं भेज सकते हैं, लेकिन आप उन्हें भेज सकते हैं जब आप "कार्यक्रम" उन्हें जब आप कॉल आरंभ। निम्नलिखित पोस्ट देखें: https://stackoverflow.com/a/12986066/475472