分享

Android获取本机号码(双卡双待无法获取两个号码)

 quasiceo 2014-09-02
2014-02-19 14:51 1235人阅读 评论(2) 收藏 举报

        搞了一个想获取Android手机的本机号码的功能,但是发现双卡双待的手机是无法获取到两个号码 的。在Android的官方文档是没有提供相应的Api的,因为标准的Andoird是没有双卡的,好像也只有国内才会搞双卡双待的神器吧。以下记录一下做这个功能所学习到的东西。直接上代码:

  1. import java.lang.reflect.InvocationTargetException;  
  2. import java.lang.reflect.Method;  
  3. import java.util.List;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.Context;  
  7. import android.content.SharedPreferences;  
  8. import android.content.SharedPreferences.Editor;  
  9. import android.os.Bundle;  
  10. import android.preference.PreferenceManager;  
  11. import android.telephony.CellInfo;  
  12. import android.telephony.TelephonyManager;  
  13. import android.view.Menu;  
  14. import android.widget.TextView;  
  15.   
  16. public class MainActivity extends Activity  
  17. {  
  18.   
  19.     private TextView    tv;  
  20.     private TextView    tv2;  
  21.     // ///////////////////////////////////  
  22.     static String       ISDOUBLE;  
  23.     static String       SIMCARD;  
  24.     static String       SIMCARD_1;  
  25.     static String       SIMCARD_2;  
  26.     static boolean      isDouble;  
  27.   
  28.     // //////////////////////////////////  
  29.   
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState)  
  32.     {  
  33.         super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.activity_main);  
  35.   
  36.         tv = (TextView) findViewById(R.id.text);  
  37.         tv2 = (TextView) findViewById(R.id.text2);  
  38.   
  39.         tv2.setText("不知道哪个卡可用!");  
  40.   
  41.         getNumber();  
  42.   
  43.     }  
  44.   
  45.     private void getNumber()  
  46.     {  
  47.         TelephonyManager tm = (TelephonyManager) this.getSystemService(this.TELEPHONY_SERVICE);  
  48.         String phoneNumber1 = tm.getLine1Number();  
  49.   
  50.         // String phoneNumber2 = tm.getGroupIdLevel1();  
  51.   
  52.         initIsDoubleTelephone(this);  
  53.         if (isDouble)  
  54.         {  
  55.             // tv.setText("这是双卡手机!");  
  56.             tv.setText("本机号码是:" + "   " + phoneNumber1 + "   " + "这是双卡手机!");  
  57.         } else  
  58.         {  
  59.             // tv.setText("这是单卡手机");  
  60.             tv.setText("本机号码是:" + "   " + phoneNumber1 + "   " + "这是单卡手机");  
  61.         }  
  62.   
  63.     }  
  64.   
  65.     public void initIsDoubleTelephone(Context context)  
  66.     {  
  67.         isDouble = true;  
  68.         Method method = null;  
  69.         Object result_0 = null;  
  70.         Object result_1 = null;  
  71.         TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  
  72.         try  
  73.         {  
  74.             // 只要在反射getSimStateGemini 这个函数时报了错就是单卡手机(这是我自己的经验,不一定全正确)  
  75.             method = TelephonyManager.class.getMethod("getSimStateGemini"new Class[]  
  76.             { int.class });  
  77.             // 获取SIM卡1  
  78.             result_0 = method.invoke(tm, new Object[]  
  79.             { new Integer(0) });  
  80.             // 获取SIM卡2  
  81.             result_1 = method.invoke(tm, new Object[]  
  82.             { new Integer(1) });  
  83.         } catch (SecurityException e)  
  84.         {  
  85.             isDouble = false;  
  86.             e.printStackTrace();  
  87.             // System.out.println("1_ISSINGLETELEPHONE:"+e.toString());  
  88.         } catch (NoSuchMethodException e)  
  89.         {  
  90.             isDouble = false;  
  91.             e.printStackTrace();  
  92.             // System.out.println("2_ISSINGLETELEPHONE:"+e.toString());  
  93.         } catch (IllegalArgumentException e)  
  94.         {  
  95.             isDouble = false;  
  96.             e.printStackTrace();  
  97.         } catch (IllegalAccessException e)  
  98.         {  
  99.             isDouble = false;  
  100.             e.printStackTrace();  
  101.         } catch (InvocationTargetException e)  
  102.         {  
  103.             isDouble = false;  
  104.             e.printStackTrace();  
  105.         } catch (Exception e)  
  106.         {  
  107.             isDouble = false;  
  108.             e.printStackTrace();  
  109.             // System.out.println("3_ISSINGLETELEPHONE:"+e.toString());  
  110.         }  
  111.         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);  
  112.         Editor editor = sp.edit();  
  113.         if (isDouble)  
  114.         {  
  115.             // 保存为双卡手机  
  116.             editor.putBoolean(ISDOUBLE, true);  
  117.             // 保存双卡是否可用  
  118.             // 如下判断哪个卡可用.双卡都可以用  
  119.             if (result_0.toString().equals("5") && result_1.toString().equals("5"))  
  120.             {  
  121.                 if (!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1"))  
  122.                 {  
  123.                     editor.putString(SIMCARD, "0");  
  124.                 }  
  125.                 editor.putBoolean(SIMCARD_1, true);  
  126.                 editor.putBoolean(SIMCARD_2, true);  
  127.   
  128.                 tv2.setText("双卡可用");  
  129.   
  130.             } else if (!result_0.toString().equals("5") && result_1.toString().equals("5"))  
  131.             {// 卡二可用  
  132.                 if (!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1"))  
  133.                 {  
  134.                     editor.putString(SIMCARD, "1");  
  135.                 }  
  136.                 editor.putBoolean(SIMCARD_1, false);  
  137.                 editor.putBoolean(SIMCARD_2, true);  
  138.   
  139.                 tv2.setText("卡二可用");  
  140.   
  141.             } else if (result_0.toString().equals("5") && !result_1.toString().equals("5"))  
  142.             {// 卡一可用  
  143.                 if (!sp.getString(SIMCARD, "2").equals("0") && !sp.getString(SIMCARD, "2").equals("1"))  
  144.                 {  
  145.                     editor.putString(SIMCARD, "0");  
  146.                 }  
  147.                 editor.putBoolean(SIMCARD_1, true);  
  148.                 editor.putBoolean(SIMCARD_2, false);  
  149.   
  150.                 tv2.setText("卡一可用");  
  151.   
  152.             } else  
  153.             {// 两个卡都不可用(飞行模式会出现这种种情况)  
  154.                 editor.putBoolean(SIMCARD_1, false);  
  155.                 editor.putBoolean(SIMCARD_2, false);  
  156.   
  157.                 tv2.setText("飞行模式");  
  158.             }  
  159.         } else  
  160.         {  
  161.             // 保存为单卡手机  
  162.             editor.putString(SIMCARD, "0");  
  163.             editor.putBoolean(ISDOUBLE, false);  
  164.         }  
  165.         editor.commit();  
  166.     }  
  167.   
  168.     @Override  
  169.     public boolean onCreateOptionsMenu(Menu menu)  
  170.     {  
  171.         // Inflate the menu; this adds items to the action bar if it is present.  
  172.         getMenuInflater().inflate(R.menu.main, menu);  
  173.         return true;  
  174.     }  
  175.   
  176. }  

当然不要忘记添加权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" />

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多