获取SIM/UIM卡的联系人容量及已用容量信息

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemClock;

import com.android.internal.telephony.IIccPhoneBook;
import com.android.internal.telephony.IccConstants;
import com.android.internal.telephony.AdnRecord;
import android.os.ServiceManager;
import android.widget.TextView;

public class AdnRecordActivity extends Activity {
     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          TextView tv = (TextView) findViewById(R.id.tv);
          System.out.println("AdnRecordActivity");

          try {
               for (int i = 0; i < 3; i++) {
                    long timeStart = SystemClock.currentThreadTimeMillis();

                    String g = "G卡存储状况(已用/全部):"
                              + ICCPhonebook.getGsmPhonebookSize() + "/"
                              + ICCPhonebook.getGsmPhonebookCapacity();
                    System.out.println(g);
                    tv.setText(g);

                    String c = "C卡存储状况(已用/全部):"
                              + ICCPhonebook.getCdmaPhonebookSize() + "/"
                              + ICCPhonebook.getCdmaPhonebookCapacity();
                    System.out.println(c);
                    tv.append("\n" + c);

                    System.out.println("run time: "
                              + (SystemClock.currentThreadTimeMillis() - timeStart));
               }
          } catch (Exception e) {
               tv.append("\n exception catched");
               e.printStackTrace();
          }
     }

     /**
     * The CDMA card is unaccessible when in fly-mode, consequently, please
     * ensure isFlyMode() is true before call other methods;
     *
     * @author chencc
     */
     public final static class ICCPhonebook {
          private static final String gsmPhonebook = "simphonebook";
          private static final String cdmaPhonebook = "simphonebook3";

          public static boolean isFlyMode() {
               // TODO
               return false;
          }

          /**
          * @return 有效的联系人记录个数
          * @throws RemoteException
          */
          public static int getGsmPhonebookSize() throws RemoteException   {
               return getPhonebookSize(gsmPhonebook);
          }

          public static int getCdmaPhonebookSize() throws RemoteException   {
               return getPhonebookSize(cdmaPhonebook);
          }

          public static int getGsmPhonebookCapacity() throws RemoteException   {
               int size[] = getIccPhonebook(gsmPhonebook).getAdnRecordsSize(
                         IccConstants.EF_ADN);
               return size[2];
          }

          public static int getCdmaPhonebookCapacity() throws RemoteException  {
               return getAdnRecords(getIccPhonebook(cdmaPhonebook)).size();
          }

          private static int getPhonebookSize(String service)
                    throws RemoteException {
               List<AdnRecord> adnRecordList = getAdnRecords(getIccPhonebook(service));

               int i = 0;
               for (AdnRecord r : adnRecordList) {
                    if (!r.isEmpty()) {
                         i++;
                    }
               }

               return i;
          }

          private static List<AdnRecord> getAdnRecords(IIccPhoneBook simPhoneBook)
                    throws RemoteException {
               List<AdnRecord> adnRecordList = simPhoneBook
                         .getAdnRecordsInEf(IccConstants.EF_ADN);
               // do it twice cause the second time shall read from cache only
               adnRecordList = simPhoneBook.getAdnRecordsInEf(IccConstants.EF_ADN);
               if (adnRecordList == null) {
                    adnRecordList = new ArrayList<AdnRecord>();
               }
               return adnRecordList;
          }

          public static IIccPhoneBook getIccPhonebook(String service) {
               IIccPhoneBook simPhoneBook = IIccPhoneBook.Stub
                         .asInterface(ServiceManager.getService(service));
               if (simPhoneBook == null)
                    throw new NullPointerException("Can't get the Service: "
                              + service);
               return simPhoneBook;
          }
     }


所需权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值