2016-03-25 6 views
0

Ich bin neu in Android. Mein Telefon hat zwei SIM-Steckplätze und ich möchte die Informationen der zweiten SIM-Karte wissen. Daher möchte ich die folgende Methode im TelephonyManager verwenden, die ausgeblendet ist.Wie verwende ich eine versteckte Methode in Android?

enter image description here

Jemand mir sagen, wie reflektieren zu verwenden, und hier ist mein Versuch.

  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(); 
      } 

Leider ist hier Ausnahme:

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) 

Können Sie mir helfen, es zu beheben?

+0

Unter welcher Android-Version laufen Sie? –

+0

Hallo, @MikeM. 23. – Zack

+0

Führen Sie diesen Code direkt auf Ihrem Telefon aus oder testen Sie ihn in einem Emulator? –

Antwort

2

Es gab keine Unterstützung für mehrere SIM-Karten in Android vor Lollipop 5.1 (API 22). Diese Methode mit dieser Signatur gibt es in KitKat nicht, daher verwendet Ihr Telefon proprietäre Software vom Hersteller, um die Dual-SIMs zu handhaben. Sie müssen sich wahrscheinlich an den Hersteller oder Anbieter wenden, um Informationen darüber zu erhalten, wie Sie auf diese Funktionalität zugreifen können, es sei denn, Sie können anhand von Suchvorgängen, die für Ihre Marke und Ihr Modell spezifisch sind, etwas finden.

Als Referenz here's that method in der KitKat-Quelle, die, wie Sie sehen können, kein Argument für den SIM-Index akzeptiert. Ihre reflektive Methode funktioniert, wenn Sie die Methode ohne Parameter erhalten, aber das hilft Ihnen nicht beim Zugriff auf den Status der zweiten SIM.

+1

danke, wenn ich es in einem Emulator testet, der Lollipop 5.1 (API 22) ist, meine Methode Effekte. – Zack

Verwandte Themen