2010-08-18 27 views
6

पर कॉलर आईडी को छिपाने के लिए Android फोन पर, कॉल के तहत -> अतिरिक्त सेटिंग्स -> कॉलर आईडीकैसे प्रोग्राम के एंड्रॉयड

इसे अपने कॉलर ID को छिपाने के लिए संभव है। मैं अपने कोड से प्रोग्रामिक रूप से ऐसा करना चाहता हूं, लेकिन ऐसा करने का कोई तरीका नहीं ढूंढ पाया।

मैं 2.1 रिहाई के लिए

android.provider android.telephony

के माध्यम से खोज की है और यह पता लगाने के लिए सक्षम नहीं था।

क्या किसी ने सफलतापूर्वक इस समस्या को हल किया है?

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

उत्तर

1

यहां मैं दो दृष्टिकोणों का वर्णन करूंगा जो मैंने कोशिश की थी।

1.) आपके आवेदन से अतिरिक्त कॉल सेटिंग्स स्क्रीन प्रदर्शित करना संभव है। हालांकि ऐसा लगता है कि यह सेटिंग एप्लिकेशन का हिस्सा है, यह सच नहीं है। इस गतिविधि मूल निवासी फोन आवेदन का हिस्सा है, और यह निम्नलिखित के इरादे से संपर्क किया जा सकता है:

Intent additionalCallSettingsIntent = new Intent("android.intent.action.MAIN"); 
ComponentName distantActivity = new ComponentName("com.android.phone", "com.android.phone.GsmUmtsAdditionalCallOptions"); 
additionalCallSettingsIntent.setComponent(distantActivity); 
startActivity(additionalCallSettingsIntent); 

तो उपयोगकर्ता को अपने से कॉलर ID पसंद पर प्रेस करने की है और 3 विकल्पों के साथ रेडियो बटन हो जाता है।

यह वास्तव में वास्तव में नहीं था जब मैं इस प्रश्न से पूछा था। मैं ऐसे कदम से बचना चाहता था जहां उपयोगकर्ता को और विकल्प चुनना पड़े।

2.) जब 1 के तहत वर्णित दृष्टिकोण मूल फोन अनुप्रयोग में निष्पादित किया जाता है, setOutgoingCallerIdDisplay()com.android.internal.telephony.Phone से कार्य किया गया है। इस वर्ग पर जावा प्रतिबिंब का उपयोग करें और उचित मानकों के साथ समारोह को लागू करने की कोशिश: यह अगले दृष्टिकोण का आधार था

try 
{ 
    Class <?> phoneFactoryClass = Class.forName("com.android.internal.telephony.PhoneFactory"); 

    try 
    { 
     Method getDefaultPhoneMethod = phoneFactoryClass.getDeclaredMethod("getDefaultPhone");    
     Method makeDefaultPhoneMethod = phoneFactoryClass.getMethod("makeDefaultPhone" , Context.class);     

     try 
     {      
      makeDefaultPhoneMethod.invoke(null, this); 
      Object defaultPhone = getDefaultPhoneMethod.invoke(null); 

      Class <?> phoneInterface = Class.forName("com.android.internal.telephony.Phone"); 
      Method getPhoneServiceMethod = phoneInterface.getMethod("setOutgoingCallerIdDisplay", int.class, Message.class); 

      getPhoneServiceMethod.invoke(defaultPhone, 1, null);      
     } 
     catch (InvocationTargetException ex) 
     { 
      ex.printStackTrace();     
     } 
     catch (IllegalAccessException ex) 
     { 
      ex.printStackTrace();     
     }  
    } 
    catch (NoSuchMethodException ex) 
    { 
     ex.printStackTrace();     
    }   
} 
catch (ClassNotFoundException ex) 
{ 
    ex.printStackTrace();     
}  

सबसे पहले मैं सिर्फ getDefaultPhone() का उपयोग करने की कोशिश की, लेकिन मैं RuntimeException

मिल

"फोनफैक्टरी.getDefaultPhone को लूपर थ्रेड से बुलाया जाना चाहिए"

जाहिर है, इस तथ्य को निहित किया गया है कि मैंने इस विधि को संदेश लूप से कॉल करने का प्रयास किया जो मूल फ़ोन ऐप नहीं था।

अपनी डिफ़ॉल्ट फोन करके इस से बचने के लिए कोशिश की, लेकिन यह एक सुरक्षा उल्लंघन था:

त्रुटि/AndroidRuntime (2338): java.lang.SecurityException: अनुमति इनकार: प्रसारण android.provider भेजने की अनुमति नहीं। टेलीफोनी।पीआईडी ​​= 2338, यूआईडी से SPN_STRINGS_UPDATED = 10048

एक ही रास्ता काबू पाने के लिए (दोनों की) इस

Run secure API calls as root, android

+0

कोर सिस्टम ऐप और मेरे ऐप पर हस्ताक्षर करने के तरीके के समान कुंजी कैसे प्राप्त करें? – pengwang

+0

कृपया मेरे उत्तर के नीचे दिए गए लिंक का संदर्भ लें। आपको वहां और अधिक विस्तृत चर्चा मिलेगी। लेकिन आम तौर पर, सुरक्षा कारणों से, इसे प्राप्त करना संभव नहीं होना चाहिए, जब तक कि आप अपने स्वयं के एंड्रॉइड सिस्टम निर्माण को "खाना पकाने" न दें। – Zelimir

+0

@Zelimir क्या आप कृपया मेरी मदद कर सकते हैं [यहां] (http://stackoverflow.com/questions/22908750/how-to-now-whether-hiding-caller-id-is-enabled-or-not-in-android) ... – RuntimeException

0

मुझे यकीन है कि अगर यह एक वैश्विक सुविधा है, लेकिन ऑस्ट्रेलियाई फोन # 31 # या साथ फोन करने वाले का नंबर लगाकर द्वारा उनकी संख्या छिपा कर सकते हैं नहीं कर रहा हूँ। यह सही समाधान नहीं हो सकता है, लेकिन इस तरह का एक उपसर्ग संभवतः कोडिंग के दौरान आपकी आवश्यकताओं के लिए काम कर सकता है।

+0

में बताया गया है, कोर सिस्टम एप्लिकेशन के रूप में एक ही कुंजी के साथ अपने ऐप हस्ताक्षर करने के लिए किया जाएगा हां, मुझे इसके बारे में पता है, लेकिन मैं एंड्रॉइड सिस्टम के माध्यम से ऐसा करने और नेटवर्क प्रदाता स्वतंत्र होने के लिए कुछ रास्ता तलाश रहा था। वैसे भी, संकेत के लिए धन्यवाद। – Zelimir

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