可以创建一个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