--- by Ruiming.Lv
在Android中,对SIM中的联系人进行操作,需要通过系统提供的Content Provider进行,该Provider就是Telphony中的IccProvider。但是,由于SIM卡存储的一些特性,在操作上,与ContactsProvider有很多不一样。
1 IccProvider工程相关
IccProvider是Telephony中实现的Content Provider(IccProvider),它提供SIM卡联系人的相关操作。IccProvider源码所在的工程路径为:packages\services\Telephony。在该工程中,IccProvider的声明如下:
<providerandroid:name="IccProvider"
android:authorities="icc"
android:multiprocess="true"
android:exported="true"
android:readPermission="android.permission.READ_CONTACTS"
android:writePermission="android.permission.WRITE_CONTACTS"/>。
IccProvider相关功能的具体实现主要在如下Java文件中:frameworks/opt/telephony/src/java/com/android/internal/telephony/IccProvider.java。另外,Telephony的包名为:com.android.phone,生成的APK的名称为:TeleService.apk。
2 IccProvider提供的URI
一般情况下,IccProvider对外提供的URI为:“content://icc/and”。如果系统支持双卡,用此URI操作的SIM卡为用户首选的SIM卡。对于双卡,某些芯片厂商会针对不同的SIM卡定义不同的URI,具体格式为:“content://icc/adn/subId/SubId”。其中SubId的值需要根据SIM卡当前的Subscription Id进行填充。例如,如果SIM1和SIM2的SubId分别为0和1,那么,这个两张SIM卡的URI为:“content://icc/adn/subId/0”和“content://icc/adn/subId/1”。
注意:
1.SubId可以通过SubscriptionInfo对象获取;