调用内置拨号软件拨打电话 && 系统常用Uri及URI编码解码 && 读取号码跟IMEI && 设备唯一标识码

       可以创建一个activity,具有输入号码并拨打电话的功能。关键点:

(1)在AndroidManifest中添加users-permission,并声明使用权限:

<uses-permission  android:name="android.permission.CALL_PHONE" />

 这是由于拨打电话属于手机底层的服务,与用户隐私及通话费等相关,因此,程序必须取得相关权限。

(2)通过Intent对象,带入“ACTION_CALL”这个约定INTENT的关键词,以及通过Uri.parse()方法将用户要拨打的电话号码带入。注意传入的Uri的数据,电话的prefix为“tel:”。

(3)最后以startActivity()方法将定义的Intent传入,即可完成通过程序直拨打电话。

       主CODE如下:

public class MainActivity extends Activity {
	EditText mobileText;    //如果该变量想定义在onCreate内部,则要用final修饰,否则提示错误。
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //final EditText mobileText;
        Button btn =(Button)findViewById(R.id.callphone);
        mobileText = (EditText)findViewById(R.id.calllnumber);
        
        btn.setOnClickListener(new Button.OnClickListener(){
        	public void onClick(View v){
        		String strMobile = mobileText.getText().toString();		//获取输入的String型内容
        		Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+strMobile));  prefix前缀加上号码
        		
        		MainActivity.this.startActivity(intent);
        	}
        });        
    }
}

        需要说明的是:Intent.ACTION_DAIL是跳到拨号界面,Intent.ACTION_CALL则是直接拨号了。如果仅仅是跳转到拨号界面,可以自己拨任意号的话,用Intent.ACTION_DAIL,后面的URI置空就可以了。

===========================================================================================================================

      除了上面拨号的URI,其他常用的URI还有:

(1)显示网页:
   Uri uri = Uri.parse("http://www.google.com"); 
   Intent it = new Intent(Intent.ACTION_VIEW,uri); 
   startActivity(it);
(2)显示地图: 
  Uri uri = Uri.parse("geo:38.899533,-77.036476"); 
  Intent it = new Intent(Intent.Action_VIEW,uri); 
  startActivity(it);

(3)发送短信 
  Uri uri = Uri.parse("smsto:0800000123"); 
  Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
  it.putExtra("sms_body", "The SMS text");     //intent直接带参数,不用bundle
  startActivity(it); 

       另一方面,关于URI,我们要编写一个下载程序,假设下载的路径是 http://www.dbank.com/documents/图片/华仔.jpg,如果直接用new URL(path)的方式,是无法取得网络连接的,因为在程序中无法直接请求一个含有中文的url,所以,我们要对它编码。
       URL编码,它只对非字母数字的字符借助utf-8或gbk来编码。编码时注意 不能把整个url路径传到UrlEncoder的decode方法中,因为它也会把反斜杠/和冒号:也编码,所以域名部分是不需要编码的,取出路径部分 /图片/华仔.jpg,然后用split方法分割再分别编码,算法如下

	public static String formatUrl(String url) throws UnsupportedEncodingException{
		String[] dir = url.split("/");
		StringBuffer tempPath = new StringBuffer("");
		for(int i = 0; i < dir.length; i++){
			tempPath.append(URLEncoder.encode(dir[i], "UTF-8"));
			tempPath.append("/");
		}
		return tempPath.toString().substring(0, tempPath.length() - 1);
	}

最后获取的就是例如 "http://www.dbank.com/documents/%E5%8D%8E%E4%BB%94.jpg" 。这下可以new了,格式是百分号加16进制码的方式,这便构成了url格式的编码。
        URL解码,经过测试解码和编码的唯一不同是,解码时只对16进制数(中文编码)解码,而反斜杠/,英文,数字是不会有所改变的,所以解码时不需要以斜杠/ 为界限,plit()分割来解码,而是直接传入路径

    decode = URLDecoder.decode("http://www.dbank.com/documents/%E5%8D%8E%E4%BB%94.jpg","UTF-8");

打印结果则是  http://www.dbank.com/documents/图片/华仔.jpg
==================================================================================================================================

       Android提供了一个API可以获取SIM卡号码,即通过TelephonManager获取本机电话号码。不过本人试过获取不成功,可能跟SIM卡类型有关。IMEI码也是唯一的,用户无法自行更改的,很大程度上防止了“作弊”用户行为。比如,我们可以用IEMI码作为登陆验证。

(1)在XML中设置权限

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

(2)获取的电话号码以String类型返回,可以合适的控件显示出

TelephonyManager telephonManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String telephoneNumber = telephonManager.getLine1Number();

(3)获取的IMEI号也是String类型

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String IMEI = telephonyManager.getDeviceId();

==============================================================================================

        有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码。虽然Android系统中提供了这样设备识别码,但是由于Android系统版本、厂商定制系统中的Bug等限制,稳定性和唯一性并不理想。下面收集了一些“有能力”或“有一定能力”作为设备标识的串码。

(1)DEVICE_ID

         获取方法见上面的getDeviceId方法

(2)MAC ADDRESS

(3)Sim Serial Number

         装有SIM卡的设备,可以通过下面的方法获取到Sim Serial Number:

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

String SimSerialNumber = tm.getSimSerialNumber(); 

(4)ANDROID_ID

        在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。可以通过下面的方法获取:

import android.provider.Settings;   

String ANDROID_ID = Settings.System.getString(getContentResolver(), Settings.System.ANDROID_ID); 

(5)Android系统2.3版本以上可以通过下面的方法得到Serial Number,且非手机设备也可以通过该接口获取。String SerialNumber = android.os.Build.SERIAL; 

(6)Installtion ID : UUID



 参考原文:http://blog.163.com/ppy2790@126/blog/static/10324224120111383430531/

参考原文:http://bbs.chinaunix.net/thread-978796-1-1.html

参考原文:http://bbs.csdn.net/topics/350112396

参考原文:http://blog.sina.com.cn/s/blog_6728144b010109iq.html

参考原文:http://blog.csdn.net/etzmico/article/details/7107001

参考原文:http://blog.csdn.net/etzmico/article/details/6853670

参考原文:http://blog.csdn.net/dai_zhenliang/article/details/8634042

参考原文:http://blog.csdn.net/sqk1988/article/details/6820929

你可能感兴趣的:(调用内置拨号软件拨打电话 && 系统常用Uri及URI编码解码 && 读取号码跟IMEI && 设备唯一标识码)