2016-03-25 12 views
0

Android'de yeniyim. Telefonumun iki SIM yuvası var ve ikinci SIM kartın bilgilerini bilmek istiyorum. Bu nedenle, gizli olan TelephonyManager'da aşağıdaki yöntemi kullanmak istiyorum.Android'de gizli bir yöntem nasıl kullanılır?

enter image description here

Birisi nasıl yansıtacak kullanmak söyle, burada benim deneyin olduğunu.

java.lang.NoSuchMethodException: getSimState [int] 
at java.lang.Class.getConstructorOrMethod(Class.java:472) 
at java.lang.Class.getMethod(Class.java:857) 
at (MainActivity.java:61) 
at android.view.View.performClick(View.java:4438) 
at android.view.View$PerformClick.run(View.java:18442) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5195) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) 
at dalvik.system.NativeStart.main(Native Method) 

bana bunu düzeltmek için yardımcı olabilir misiniz:

  Class<TelephonyManager> telephonyManagerClass = TelephonyManager.class; 
      TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
      try { 
       Method method = telephonyManagerClass.getMethod("getSimState", new Class[]{int.class}); 
       method.setAccessible(true); 
       Object object = method.invoke(telephonyManager,1); 
       int a = (int)object; 
       System.out.println(a); 
      } catch (NoSuchMethodException e) { 
       e.printStackTrace(); 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 

Maalesef burada istisna değildir?

+0

Hangi Android sürümü altında çalışıyorsunuz? –

+0

merhaba, @MikeM. 23. – Zack

+0

Bu kodu doğrudan telefonunuzda mı çalıştırıyorsunuz, yoksa bir emülatörde test ediyor musunuz? –

cevap

2

Android'de Lollipop 5.1'den (API 22) önce birden fazla SIM kart desteği yok. KitKat'ta bu imzayla o yöntem mevcut değildir, bu nedenle telefonunuz çift SIM'leri işlemek için üreticiden özel yazılım kullanıyor. Markanıza ve modelinize özel aramalarla bir şey bulamazsanız, bu işleve nasıl erişeceğiniz konusunda bilgi almak için üreticiyle veya satıcıyla iletişim kurmanız gerekir.

KitKat kaynağında, here's that method referansı için, SIM dizini için hiçbir argüman almadığını görebilirsiniz. Hiçbir parametresi olmayan yöntemi alırsanız, yansıtıcı yönteminiz çalışır, ancak bu ikinci SIM için durumunuza erişmenize yardımcı olmaz.

+1

teşekkürler Lol Lollipop 5.1 (API 22) olan bir emülatörde test ettiğimde, metod efektlerim. – Zack

İlgili konular