2012-04-02 9 views
6

में इस त्रुटि को हल करने के लिए "com.android.internal.telephony को किसी प्रकार से हल नहीं किया जा सकता" मैं सरल कॉल फ़िल्टर एप्लिकेशन बना रहा हूं जो अवांछित कॉल को प्रतिबंधित करता है। मैं कॉल को प्रतिबंधित करने के लिए निम्नलिखित कोड का उपयोग करता हूं लेकिन मैं नीचे दिए गए कोड में इस पंक्ति की समस्या को पुनर्स्थापित करने में असमर्थ हूं "com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke (tm);" यह त्रुटि संदेश दिखाता है com.android.internal.telephony को इस त्रुटि को हल करने के लिए एंड्रॉइड में एक प्रकार के लिए हल नहीं किया जा सकता है।एंड्रॉइड

public class CallBlockReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

    } 

    private void getTeleService(Context context) { 
     TelephonyManager tm = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     try { 
      // Java reflection to gain access to TelephonyManager's 
      // ITelephony getter 
      Log.v("", "Get getTeleService..."); 
      Class c = Class.forName(tm.getClass().getName()); 
      Method m = c.getDeclaredMethod("getITelephony"); 
      m.setAccessible(true); 
      com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e("", 
        "FATAL ERROR: could not connect to telephony subsystem"); 
      Log.e("", "Exception object: " + e); 
     } 
} 

} 

कृपया मेरी मदद करें।

+2

आपने अपनी परियोजना में ITelephony.AIDL फ़ाइल को जोड़ा है? और यदि आपने जोड़ा है तो आपका पैकेज नाम mustbe पैकेज नाम होना चाहिए 'com/android/internal/telephony/ITelephony.AIDL' –

+0

नहीं, मैंने ITelephony.AIDL फ़ाइल नहीं जोड़ा है। इसे कैसे जोड़ना है? –

+0

@ ρяσѕρєя के - क्या यह फ़ोल्डर स्टैक्चर "myApp/App/src" के अंतर्गत जाता है? मैंने इस फ़ोल्डर संरचना को बनाने की कोशिश की लेकिन एंडोइड स्टूडियो एडिटर ऑटो पूर्ण "आयात com.example.app ..." टाइप करते समय इसे प्रदर्शित नहीं करता है। – buzibuzi

उत्तर

10

आपने अपनी परियोजना में ITelephony.AIDL फ़ाइल जोड़ दी है? और यदि आपने जोड़ा है तो अधिक जानकारी के लिए Blocking Incoming call के लिए आपका पैकेज नाम com/android/internal/telephony/ITelephony.AIDL: होना चाहिए। here

+0

प्रशांत, src फ़ोल्डर के अंदर com/android/internal/telephony फ़ोल्डर संरचना बनाते हैं और सहायता डालते हैं टेलीफोनी फ़ोल्डर में फ़ाइल –

+0

धन्यवाद इमरान इसके कामकाज ... :) –

+0

इन चरणों का पालन करके और परियोजना की सफाई मेरे लिए काम किया। बहुत बहुत धन्यवाद ... –

0

से एआईडीएल फ़ाइल डाउनलोड करें आप प्रतिबिंब के साथ आंतरिक/छुपे हुए एंड्रॉइड एपीआई का उपयोग कर रहे हैं।

जांचें कि आप एक वैध विधि नाम का आह्वान करने का प्रयास कर रहे हैं - यह एक शानदार मौका है कि इस एपीआई में बदलाव आया है या जो संस्करण आप विकसित कर रहे हैं उसमें मौजूद नहीं है।

5

आप इस प्रकार निर्दिष्ट करने और एआईडीएल फ़ाइल जोड़ने की आवश्यकता से बचने के लिए ITelephony ऑब्जेक्ट पर कॉल विधियों के प्रति प्रतिबिंब का उपयोग कर सकते हैं। उदाहरण के लिए, कॉल समाप्त करना:

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
Class<?> c = Class.forName(tm.getClass().getName()); 
Method m = c.getDeclaredMethod("getITelephony"); 
m.setAccessible(true); 
Object telephonyService = m.invoke(tm); 
Class<?> telephonyServiceClass = Class.forName(telephonyService.getClass().getName()); 
Method endCallMethod = telephonyServiceClass.getDeclaredMethod("endCall"); 
endCallMethod.invoke(telephonyService); 
+0

बहुत बहुत धन्यवाद! शानदार जवाब! –