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;
}
}
}
}
分享到:
相关推荐
6.23 画一颗心,打电话给honey 392 6.24 开启内置闹钟与已安装的应用程序设置 394 6.25 在sdk开发环境中访问jni接口 397 第7章 娱乐多媒体 401 7.1 访问drawable资源的宽和高 402 7.2 绘制几何图形...
Handset Handset Handset Handset Manufacturers Manufacturers Manufacturers Manufacturers 电话制造商 ASUSTeK Computer Inc. 华硕 Garmin International, Inc. HTC Corporation ( 多普达的母公司 ) 宏达电子 ...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...
6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...
6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...
6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...
6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动...
6.23 画一颗心,打电话给HONEY 6.24 开启内置闹钟与已安装的应用程序设置 6.25 在SDK开发环境中访问JNI接口 第7章 娱乐多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...
//Android系统中基于动作机制,来调用系统的应用,你告诉系统你想做什么动作,系统就会把能做这个动作的应用给你,如果没有这个应用,会抛异常 //设置动作,通过意图告知系统 if (isMobileNO(phone)){ Intent ...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统...
6.23 画一颗心,打电话给HONEY 第7章 .娱.乐. 多媒体 7.1 访问Drawable资源的宽和高 7.2 绘制几何图形 7.3 手机屏幕保护程序 7.4 用手指移动画面里的照片 7.5 加载存储卡的...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...
5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置...