可以创建一个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如下:
package com.example.callphone; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.Button; import android.widget.EditText; //编辑框的类 import android.view.View; import android.content.Intent; import android.net.Uri; //uri的类 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); } }); } }
需要说明的是:如果将mobileText定义onCreate内部,则要用final修饰,否则提示“Cannot refer to a non-final variable mobileText inside an inner class defined in a different method”,这是因为内部类访问所在方法中的局部变量,必须是final修饰的,定义在方法外部则不会有此提示。
===========================================================================================================================
除了上面拨号的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");
startActivity(it);
==================================================================================================================================
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();
参考原文: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