`
lihao312
  • 浏览: 479775 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android调用打电话(Call Phone)

阅读更多
1.首先添加 Android Layout 文件
File : res/layout/main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

	<Button android:id="@+id/call_button"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="@string/call_button"/>
</LinearLayout>

2. Activity
其核心代码
Intent mIntent = new Intent(Intent.ACTION_CALL);
mIntent.setData(Uri.parse("tel:02133330000"));
startActivity(mIntent);

完整代码MainActivity.java
package com.lance.app;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button mCallButton;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//call button Listener
		addCallButtonListener();
	}
	
	/**
	 * call button Listener
	 */
	private void addCallButtonListener() {
		mCallButton = (Button)findViewById(R.id.call_button);
		mCallButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				Intent mIntent = new Intent(Intent.ACTION_CALL);
				mIntent.setData(Uri.parse("tel:02133330000"));
				startActivity(mIntent);
			}
		});
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

3.Android Manifest
添加权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lance.app"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    
    <!-- 加入访问权限 -->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <!-- 否则不能监听每个状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
	
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.lance.app.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


4.增加PhoneStateListener监听
//add call state listener
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(MainActivity.TELEPHONY_SERVICE);
PhoneCallListener phoneCallListener = new PhoneCallListener();
telephonyManager.listen(phoneCallListener,PhoneStateListener.LISTEN_CALL_STATE);


MainActivity内部类
/**
	 * 监听状态, 重启app
	 * @author lance
	 */
	private class PhoneCallListener extends PhoneStateListener {
		private final String LOG_TAG = "com.lance.app.PhoneCallListener";
		private boolean isPhoneCalling = false;

		public void onCallStateChanged(int state, String incomingNumber) {
			if(TelephonyManager.CALL_STATE_RINGING == state) {
				Log.i(LOG_TAG, "正在呼叫: "+incomingNumber);
			}
			
			if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
				Log.i(LOG_TAG, "OFFHOOK");
				isPhoneCalling = true;
			}
			
			if(TelephonyManager.CALL_STATE_IDLE == state) {
				Log.i(LOG_TAG, "Idle");
				
				if(isPhoneCalling) {
					Log.i(LOG_TAG, "restart app");
					Intent intent = getBaseContext()
						.getPackageManager()
						.getLaunchIntentForPackage(getBaseContext().getPackageName())
						.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
					
					startActivity(intent);
					isPhoneCalling = false;
				}
			}
		}

	}
0
0
分享到:
评论

相关推荐

    《Google Android SDK开发范例大全(第3版)》.pdf

    6.23 画一颗心,打电话给honey 392 6.24 开启内置闹钟与已安装的应用程序设置 394 6.25 在sdk开发环境中访问jni接口 397 第7章 娱乐多媒体 401 7.1 访问drawable资源的宽和高 402 7.2 绘制几何图形...

    新版Android开发教程.rar

    Handset Handset Handset Handset Manufacturers Manufacturers Manufacturers Manufacturers 电话制造商 ASUSTeK Computer Inc. 华硕 Garmin International, Inc. HTC Corporation ( 多普达的母公司 ) 宏达电子 ...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK开发范例大全(第3版) 1/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK开发范例大全(第3版) 4/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(第3版) 3/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(第3版) 5/5

    6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...

    Google Android SDK开发范例大全(第3版)part2

     6.23 画一颗心,打电话给HONEY  6.24 开启内置闹钟与已安装的应用程序设置  6.25 在SDK开发环境中访问JNI接口  第7章 娱乐多媒体  7.1 访问Drawable资源的宽和高  7.2 绘制几何图形  7.3 手机屏幕保护...

    Google Android SDK开发范例大全的目录

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    安卓拨打电话+正则的使用

    //Android系统中基于动作机制,来调用系统的应用,你告诉系统你想做什么动作,系统就会把能做这个动作的应用给你,如果没有这个应用,会抛异常 //设置动作,通过意图告知系统 if (isMobileNO(phone)){ Intent ...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统...

    google android sdk开发范例大全 第二版 PDF 光盘代码

     6.23 画一颗心,打电话给HONEY  第7章 .娱.乐. 多媒体   7.1 访问Drawable资源的宽和高   7.2 绘制几何图形   7.3 手机屏幕保护程序   7.4 用手指移动画面里的照片   7.5 加载存储卡的...

    Google Android SDK 开发范例大全01

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

    Google Android SDK 开发范例大全02

    5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...

Global site tag (gtag.js) - Google Analytics