2016-04-26 11 views
4

Wenn Sie den folgenden Code ausführen:Android getSimOperator() stürzt auf die Erlaubnis fehlt

try { 
    TelephonyManager telephonyManager = (TelephonyManager) MainApplication.getAppContext() 
                      .getSystemService(Context.TELEPHONY_SERVICE); 
    String simMCCMNC = telephonyManager.getSimOperator(); 
} catch (Exception e) { 
    Crashlytics.logException(e); 
} 

Die App stürzt mit dem folgenden Protokoll:

Nicht-tödliche Ausnahme: java.lang.SecurityException: Erfordert READ_PHONE_STATE: Weder Benutzer 10076 noch aktueller Prozess hat android.permission.READ_PHONE_STATE. bei android.os.Parcel.readException (Parcel.java:1546) bei android.os.Parcel.readException (Parcel.java:1499) bei com.android.internal.telephony.ISub $ Stub $ Proxy.getActiveSubscriptionInfoForSimSlotIndex (ISub.java:459) bei android.telephony.SubscriptionManager.getDefaultSmsSubId (SubscriptionManager.java:910) bei android.telephony.TelephonyManager.getSimOperatorNumeric (TelephonyManager.java:1622) bei android.telephony.TelephonyManager.getSimOperator (TelephonyManager. Java: 1592) bei com.myapp.app.ApplicationInitializer.generateBaseUrl (Source: 297) bei com.myapp.app.ApplicationInitializer.initFailProofComponents (Source: 193) bei com.myapp.app.ApplicationInitializer.prepareManager (Source: 121) bei com.myapp.managers.base.BaseManager.prepareManagerIfPossible (Source: 43) bei com.my.app.ApplicationInitializer.init (Source: 137) bei com.my.app.MainApplication.onCreate (Source: 23) bei android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1012) bei android.app.ActivityThread.handleBindApplication (ActivityThread.java:4628) bei android.app.ActivityThread.access $ 1500 (ActivityThread.java:151) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1374) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:135) bei android.app.ActivityThread.main (ActivityThread.java:5345) bei java.lang.reflect.Method.invoke (Method.java) bei java.lang.reflect.Method.invoke (Method.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:947) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:742)

auf den Quellcode der Suche nach Android getSimOperator(). Ich verstehe nicht, wie der Code auf eine Berechtigung abstürzen kann, die für diese Methode nicht erforderlich ist?

Ich konnte reproduzieren, wenn getDeviceId() aufrufen, weil es READ_PHONE_STATE erfordert.

Ich habe nur gesehen, dass dies auf Android-Version 5.1 passiert.

+0

kann es sein, dass alle Clients, die Ausnahme zu werfen sind verwurzelt? –

Antwort

-1

Mit dieser Methode seine Arbeit feinen

DeviceInfo deviceInfo = new DeviceInfo(); 
     TelephonyManager tMgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 
     deviceInfo.setDeviceId(Util.getDeviceID(mContext)); 
     if(tMgr!=null) 
     { 
      String simSerialNumber=tMgr.getSimSerialNumber(); 
      if(simSerialNumber!=null) { 
       deviceInfo.setSimOperator(tMgr.getSimOperator()); 
       deviceInfo.setSimCountryIso(tMgr.getSimCountryIso()); 

       deviceInfo.setSimSerialNumber(simSerialNumber); 
       deviceInfo.setSimOperatorName(tMgr.getSimOperatorName()); 
       deviceInfo.setSimNetworkOperator(tMgr.getNetworkOperator()); 
      } 
     } 
+0

Warum sollte das funktionieren? Sie haben nichts geändert und rufen immer noch tMgr.getSimOperator() – JY2k

+0

Geben Sie diese Berechtigung in Manifesten ein Wie dieser Code

+0

Warum funktioniert es einwandfrei auf allen Geräten im Büro und die Dokumentation fordert diese Berechtigung nicht an, um diese Methode aufzurufen. – JY2k

-1

Verwendung unter Methode

TelephonyManager manager = (TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
    String carrierName = manager.getNetworkOperatorName(); 

    Toast.makeText(MainActivity.this, ""+carrierName, Toast.LENGTH_SHORT).show(); 

Sie sim Name des Bedieners ausgewählt retrive kann ...

+0

Ich möchte verstehen, warum dies abstürzt, wenn die Berechtigung nicht einmal nach gefordert wird die Dokumentation – JY2k

+0

Dies ist eigentlich eine andere Methode, die eine ganz andere Zeichenfolge zurückgibt – JY2k

+0

Ich habe es ohne Erlaubnis –