यहां मैं दो दृष्टिकोणों का वर्णन करूंगा जो मैंने कोशिश की थी।
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
कोर सिस्टम ऐप और मेरे ऐप पर हस्ताक्षर करने के तरीके के समान कुंजी कैसे प्राप्त करें? – pengwang
कृपया मेरे उत्तर के नीचे दिए गए लिंक का संदर्भ लें। आपको वहां और अधिक विस्तृत चर्चा मिलेगी। लेकिन आम तौर पर, सुरक्षा कारणों से, इसे प्राप्त करना संभव नहीं होना चाहिए, जब तक कि आप अपने स्वयं के एंड्रॉइड सिस्टम निर्माण को "खाना पकाने" न दें। – Zelimir
@Zelimir क्या आप कृपया मेरी मदद कर सकते हैं [यहां] (http://stackoverflow.com/questions/22908750/how-to-now-whether-hiding-caller-id-is-enabled-or-not-in-android) ... – RuntimeException