关于对SIM卡进行相关操作

    这里还是和通讯录的权限是一样的

    关于SIM卡相关状态的类是 TelephonyManager,其中包括获取SIM卡中各种状态,和SIM卡中的各种信息a

    要想对SIM卡进行操作,首先先要查看SIM卡当前状态是否存在

   

    myTelephonyManager =                       (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

    switch(myTelephonyManager.getSimState())

       {

           case TelephonyManager.SIM_STATE_ABSENT:

              Log.i(TAG, "找不到SIM卡");

              break;

             

           case TelephonyManager.SIM_STATE_NETWORK_LOCKED:

              Log.i(TAG, "需要网络解锁");

              break;

             

           case TelephonyManager.SIM_STATE_PIN_REQUIRED:

              Log.i(TAG, "需要PIN解锁");

              break;

          

           case TelephonyManager.SIM_STATE_PUK_REQUIRED:

              Log.i(TAG, "需要PUK解锁");

              break;

             

           case TelephonyManager.SIM_STATE_READY:

              Log.i(TAG, "SIM卡就绪");

              break;

          

           case TelephonyManager.SIM_STATE_UNKNOWN:

              Log.i(TAG, "未知状态");

              break;

       }

    只要当状态是SIM_STATE_READY时,才开始后续操作。在模拟器上运行的时候会出现 未知状态,这里需要真机测试

   

    接下来的事就和上面差不多了 首先是通过查询获得游标,这里需要注意的是这里的Uri与手机的通讯录是不同的

    content://icc/adn

    mCursor = getContentResolver().query(Uri.parse(str), null,null, null, null);

    通过mCursor.getColumnCount()我们可以知道 SIM卡中是有4列的 mCursor.getColumnName(X)我们可以知道表的结构是这样子的(不知道不同SIM卡 例如3G卡上的列名是否一样呢?)

   

name

number

emails

_id

    通过mCursor.getCount()我们可以知道总共联系人的数目

 

 

首先是查询操作

while (mCursor.moveToNext())

    {

           //取得名字

       String name = mCursor.getString(mCursor.getColumnIndex("name")) + "    ";

           // 取得电话号码

       String number = mCursor.getString(mCursor.getColumnIndex("number")) + "    ";

           // 取得邮箱

       String email = mCursor.getString(mCursor.getColumnIndex("emails")) + "    ";

           // 取得id

       String id = mCursor.getString(mCursor.getColumnIndex("_id")) + "\n";

    }

 

但是如果加上条件查询的话,

例如这个写的时候查询号码是10086的联系人

    mCursor = getContentResolver().query(Uri.parse(str), null,"number=?", new String[]{"10086"}, null);

有个很奇怪的地方 这时候mCursor.getColumnCount()返回的就是5了

这是通过mCursor.getColumnName(X)返回的表的结构就是

_id

name

tag

number

emails

通过输出来看 其中 tag 和 name 中的内容是一样的 这时候的输入的_id不是无条件返回的那个数值了不知道是什么原因呢?

 

    往SIM卡里增加记录是通过ContentValues的方式 但是需要注意的是 这里输入的name时不是以name作为标签,而是用 tag

       ContentValues values = new ContentValues();

       values.put("tag", "张小二");

        values.put("number", "15088888888");

       getContentResolver().insert(uri, values);

    而更新也差不多 要注意的是,它是以原先的姓名和电话号码来匹配要更新的联系人的,故要指定4个属性。

     ContentValues values = new ContentValues();

   values.put("tag", "Jones");

   values.put("number", "10086");

    values.put("newTag","Fred");

   values.put("newNumber", "10000");

getContentResolver().update(uri, values, null, null);

 

删除操作需要注意的是需要2个字段 一个是 tag 一个是number,例子如下

    String where1 = "tag='" +"bbbbb"+"'";

    where1 += " ANDnumber='" +"10086"+"'";

    int delete1 = getContentResolver().delete(uri, where1, null);

    System.out.println("where is"+where1);

System.out.println("delete is"+delete1);

特别注意 条件是 tag =’bbbbb’不能是 tag=bbbbb 否则将无法删除

如果删除成功 则delete1=1 如果失败则返回的是0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值