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;
}
}
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"/>