现在的位置: 首页 > 综合 > 正文

Android拨打电话(Intent.ACTION.CALL)&& 安卓系统常用Uri && 安卓读取电话号码跟IMEI

2013年10月26日 ⁄ 综合 ⁄ 共 2997字 ⁄ 字号 评论关闭

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

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

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

抱歉!评论已关闭.