`
lihao312
  • 浏览: 483535 次
  • 性别: 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
分享到:
评论

相关推荐

    运用Android Studio实现打电话和发短信

    对于打电话功能,需要添加`Manifest.permission.CALL_PHONE`权限,这样应用才能调用系统的拨号器拨打电话。对于发送短信功能,需要`Manifest.permission.SEND_SMS`权限,使得应用能够创建并发送短信。在`...

    U3d直接调用打电话接口,安卓和ios通用。

    标题提到的“U3d直接调用打电话接口,安卓和ios通用”就是这样一个需求,允许玩家在游戏中直接拨打电话。这个功能的实现主要依赖于Unity的内置API,它允许开发者跨平台地与Android和iOS系统的电话功能进行交互,而不...

    Android 定时打电话功能源码

    在Android平台上,开发一个定时打电话的功能涉及到多个技术层面,包括Android系统的权限管理、AlarmManager服务、Intent服务以及电话API的使用。以下是对这些知识点的详细解释: 1. **权限管理**: 在Android中,...

    android打电话源码

    在Android平台上,打电话功能是通过调用系统的电话服务来实现的。这个过程涉及到多个知识点,包括权限管理、Intent机制、电话API以及用户界面设计。现在,让我们深入探讨这些关键概念。 首先,Android系统对敏感...

    Android调用系统通讯录,选择联系人,拨打电话

    以上就是关于Android调用系统通讯录、选择联系人、拨打电话、添加及查询联系人的详细步骤和关键代码。在实际开发中,还需要注意权限管理、UI设计以及错误处理等方面,确保应用的稳定性和用户体验。

    Android开发实例:打电话

    总结一下,开发Android打电话程序的关键步骤包括: 1. 创建Android工程。 2. 设计UI布局,如`main.xml`所示,包含输入框和按钮。 3. 在`PhoneActivity.java`中处理点击事件,获取电话号码并创建`Intent`进行拨号。 4...

    Android 定时打电话功能源码.rar

    在onReceive()方法内,我们需要实现打电话的逻辑,这通常通过调用Intent的ACTION_CALL动作完成: ```java Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + phone...

    Android代码-定时打电话功能源码.zip

    综上所述,实现Android定时打电话功能,需要结合`AlarmManager`来设置定时任务,使用`Intent`来传递调用意图,以及通过`BroadcastReceiver`来监听并执行电话拨打操作。整个过程中,需要注意权限的申请和管理,确保...

    Android开发实例:打电话.zip

    在Android平台上进行应用程序开发时,实现打电话功能是常见的需求之一。这个"Android开发实例:打电话.zip"文件包含了一个具体的示例,教你如何在Android应用中集成拨打电话的功能。以下是关于这个话题的详细知识: ...

    android打电话发短信

    在Android平台上,打电话和发送短信是两个非常基础且重要的功能,尤其对于开发移动应用程序的开发者来说。本篇文章将深入探讨如何在Android应用中实现这些功能。 首先,打电话功能的实现主要依赖于`Intent`对象和`...

    android简易的打电话app

    在Android平台上,开发一个简单的打电话应用涉及到多个关键知识点。首先,我们需要理解Android系统的架构和应用程序框架,因为所有的Android应用都是基于这个框架构建的。在这个框架中,开发者使用Java或Kotlin等...

    android 实现拨打电话黑屏功能

    &lt;uses-permission android:name="android.permission.CALL_PHONE" /&gt; &lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt; ``` `CALL_PHONE` 权限用于拨打电话,而 `WAKE_LOCK` 权限则用于控制设备的...

    Android打电话源码

    在Android系统中,实现...总结来说,Android打电话源码涵盖了从应用层的`Intent`调用到系统服务的处理,再到与硬件的交互等多个层次。理解这一过程不仅有助于开发拨打电话功能,也能加深对Android系统工作原理的认识。

    Android实现打电话和发短信

    在Android应用开发中,有时需要集成打电话和发送短信的功能,以提供更丰富的用户体验。下面将详细解释如何在Android中实现这两个功能。 ### 调用系统拨号盘打电话 #### 跳转到拨号盘 ```java Intent intent = new ...

    android 打电话程序

    在Android平台上开发打电话程序,是Android应用开发中的一个重要部分,主要涉及到系统权限、Intent机制、Phone类以及AndroidManifest.xml配置等多个知识点。以下是对这些关键点的详细解释: 1. **系统权限**:在...

    安卓Android源码——android打电话源码.rar

    2. **权限管理**:由于涉及到用户的隐私和安全,调用拨打电话功能需要在AndroidManifest.xml中声明`&lt;uses-permission android:name="android.permission.CALL_PHONE" /&gt;`权限。自Android 6.0(API级别23)起,还需要...

    Android简单打电话案例

    在Android平台上,开发一个简单的打电话功能是常见的应用场景。这个案例主要涵盖了如何利用Android SDK中的Intent机制,结合系统自带的拨号器实现电话拨打。以下将详细介绍实现这一功能的关键知识点。 首先,我们...

    安卓通讯录联系人打电话归属地相关-android打电话源码.rar

    这个压缩包文件"安卓通讯录联系人打电话归属地相关-android打电话源码.rar"包含了相关的源码,可以帮助开发者理解如何实现这样的功能。尽管源码可能并未全部经过验证,但它们可以作为学习和参考的材料。下面我们将...

    android调用手机通信录并拨打电话

    在Android平台上,调用手机通信录并实现拨打电话的功能是一项常见的任务,对于开发者来说,理解这一过程至关重要。这里我们将深入探讨如何实现这个功能,并按照字母顺序排序联系人。 首先,要访问手机通信录,我们...

Global site tag (gtag.js) - Google Analytics