diff --git a/README.md b/README.md index ac53bf8..07439af 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,17 @@ RNSimData.getCountryCode() NOTE: React Native "Modules", when having only constants, work with getters, and the result of `getSimInfo()` is undefined, you need to access the properties to get any info +### Realtime methods +These methods query SimInfo and callback with result. +``` +RNSimData.getRealtimeIccid(iccids => { + if (!iccids) + console.log('get iccids call failed'); + for (i in iccids) + console.log(iccids[i]); +}) +``` + ### Caveats Might crash if tries to use in a phone without any SIM cards. diff --git a/android/src/main/java/eu/sigrlami/rnsimdata/RNSimDataModule.java b/android/src/main/java/eu/sigrlami/rnsimdata/RNSimDataModule.java index f4ee019..f2cc86a 100644 --- a/android/src/main/java/eu/sigrlami/rnsimdata/RNSimDataModule.java +++ b/android/src/main/java/eu/sigrlami/rnsimdata/RNSimDataModule.java @@ -3,6 +3,8 @@ import java.util.HashMap; import java.util.Map; import java.util.List; +import java.util.LinkedList; +import java.util.ArrayList; import android.content.Context; import android.telephony.TelephonyManager; @@ -13,6 +15,8 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.Callback; +import com.facebook.react.bridge.WritableNativeArray; +import com.facebook.react.bridge.WritableNativeMap; public class RNSimDataModule extends ReactContextBaseJavaModule { @@ -28,6 +32,40 @@ public String getName() { return "RNSimDataModule"; } + @ReactMethod + public void getRealtimeInfo(Callback callback) { + try { + TelephonyManager telManager = (TelephonyManager) this.reactContext.getSystemService(Context.TELEPHONY_SERVICE); + WritableNativeArray result = new WritableNativeArray(); + + SubscriptionManager manager = (SubscriptionManager) this.reactContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); + List subscriptionInfos = manager.getActiveSubscriptionInfoList(); + for (SubscriptionInfo subInfo : subscriptionInfos) { + String iccId = subInfo.getIccId(); + int mcc = subInfo.getMcc(); + int mnc = subInfo.getMnc(); + int simSlotIndex = subInfo.getSimSlotIndex(); + CharSequence carrierName = subInfo.getCarrierName(); + String networkCountry = telManager.getNetworkCountryIso(); + + WritableNativeMap map = new WritableNativeMap(); + + map.putString("iccid", iccId); + map.putString("mcc", Integer.toString(mcc)); + map.putString("mnc", Integer.toString(mnc)); + map.putString("carrierName", carrierName.toString()); + map.putString("simSlotIndex", Integer.toString(simSlotIndex)); + map.putString("networkCountry", networkCountry); + + result.pushMap(map); + } + callback.invoke(result); + } catch (Exception e) { + e.printStackTrace(); + callback.invoke(new String("")); + } + } + @Override public Map getConstants() { @@ -75,4 +113,4 @@ public Map getConstants() { return constants; } -} \ No newline at end of file +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..546cd91 --- /dev/null +++ b/index.js @@ -0,0 +1,23 @@ +/// +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const react_native_1 = require("react-native"); +const RNSimData = react_native_1.NativeModules.RNSimDataModule; +exports.default = { + getSimInfo() { + return RNSimData; + }, + getTelephoneNumber() { + return RNSimData.phoneNumber0; + }, + getRealtimeInfo(callback) { + RNSimData.getRealtimeInfo(callback); + }, + getCarrierName() { + return RNSimData.carrierName0; + }, + getCountryCode() { + return RNSimData.countryCode0; + } +}; +//# sourceMappingURL=index.js.map