Android电话秀(二)
来源:互联网 发布:初音秘密警察知乎 编辑:程序博客网 时间:2024/05/01 22:06
1、接Android 电话秀(一)
2、捕获电话的状态:
package com.ray.test;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.TelephonyManager;import android.util.Log;/** * * [捕获电话,包括开机自动动]<BR> * [功能详细描述] * * @author Administrator * @version [ 2011-8-11] */public class CallListener extends BroadcastReceiver{ private static final String TAG = "ray"; private static String callInNumber; private static String callOutNumber; private static boolean outGoingflag = false; @Override public void onReceive(Context context, Intent arg1) { Log.e(TAG, arg1.getAction().toString()); // 拨号 if (arg1.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { Log.e(TAG, "2222222222222"); // incomingFlag = false; callOutNumber = arg1.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.i(TAG, "call OUT:" + callOutNumber); String name = arg1.getStringExtra("name"); Log.i(TAG, "name" + name); outGoingflag = true; return; } TelephonyManager teleMgr = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); //响铃阶段 if (teleMgr.getCallState() == TelephonyManager.CALL_STATE_RINGING) { try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.e(TAG, "CALL_STATE_RINGING"); Bundle bundle = arg1.getExtras(); callInNumber = bundle.getString("incoming_number"); //这里可以加入根据incomingNumber判断是主叫还是被叫,根据当前主被叫选择启动不同的Activity。 Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClass(context, TestCallActivity.class); intent.putExtra("callInNumber", callInNumber); context.startActivity(intent); return; } // //摘机状态:播放显示通话过程动画 if (teleMgr.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK) { if (outGoingflag) { Log.e(TAG, "phoneNumber " + callOutNumber); Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClass(context, TestCallActivity.class); intent.putExtra("callOutNumber", callOutNumber); Log.i(TAG, "66666666"); context.startActivity(intent); } return; } // // //待机状态:回到电话振铃前的初始用户界面, if (teleMgr.getCallState() == TelephonyManager.CALL_STATE_IDLE) { Log.e(TAG, "TelephonyManager.CALL_STATE_IDLE"); return; } }}
3、展示界面:
package com.ray.test;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.os.RemoteException;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.android.internal.telephony.ITelephony;/*** * * [电话秀界面]<BR> * [功能详细描述] * * @author Administrator * @version [ 2011-8-11] */public class TestCallActivity extends Activity implements OnClickListener{ private String callInNumber = ""; private String callOutNumber = ""; private TextView phoneName; private TextView phoneNumber; private Button callAnswer; private Button callEnd; private Button callcancel; private ITelephony iTelephony; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.telshow); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // number = getIntent().getExtras().getString("number"); initView(); // phoneNumber.setText(number); // 打电话进入 callInNumber = getIntent().getExtras().getString("callInNumber"); Log.e("ray", "callInNumber" + callInNumber); if (callInNumber != null) { phoneNumber.setText(callInNumber); callAnswer.setVisibility(View.VISIBLE); callcancel.setVisibility(View.VISIBLE); callEnd.setVisibility(View.GONE); } callOutNumber = getIntent().getExtras().getString("callOutNumber"); Log.e("ray", "callOutNumber" + callOutNumber); if (callOutNumber != null) { phoneNumber.setText(callOutNumber); callAnswer.setVisibility(View.GONE); callcancel.setVisibility(View.GONE); callEnd.setVisibility(View.VISIBLE); callEnd.setText("结束通话"); } initialItelephony(); } private void initView() { phoneName = (TextView) findViewById(R.id.phone_name); phoneNumber = (TextView) findViewById(R.id.phone_number); callAnswer = (Button) findViewById(R.id.call_answer); callEnd = (Button) findViewById(R.id.call_end); callcancel = (Button) findViewById(R.id.call_cancel); callAnswer.setOnClickListener(this); callcancel.setOnClickListener(this); callEnd.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.call_end: try { iTelephony.endCall(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case R.id.call_cancel: try { iTelephony.endCall(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case R.id.call_answer: try { iTelephony.answerRingingCall(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; default: break; } } public class MyPhoneCallListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub // switch (state) { // 挂断 case TelephonyManager.CALL_STATE_IDLE: Log.e("ray", "CALL_STATE_IDLE"); callAnswer.setVisibility(View.GONE); callcancel.setVisibility(View.GONE); callEnd.setVisibility(View.VISIBLE); callEnd.setText("通话已结束"); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finish(); break; //响铃中 case TelephonyManager.CALL_STATE_RINGING: Log.e("ray", "CALL_STATE_RINGING"); callAnswer.setVisibility(View.VISIBLE); callcancel.setVisibility(View.VISIBLE); callEnd.setVisibility(View.GONE); break; //通话中 case TelephonyManager.CALL_STATE_OFFHOOK: callAnswer.setVisibility(View.GONE); callcancel.setVisibility(View.GONE); callEnd.setVisibility(View.VISIBLE); callEnd.setText("结束通话"); Log.e("ray", "CALL_STATE_OFFHOOK"); break; default: break; } } } public void initialItelephony() { TelephonyManager teleMgr = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); MyPhoneCallListener myPhoneCallListener = new MyPhoneCallListener(); teleMgr.listen(myPhoneCallListener, PhoneStateListener.LISTEN_CALL_STATE); Class<TelephonyManager> c = TelephonyManager.class; Method getITelephonyMethod = null; try { getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null); getITelephonyMethod.setAccessible(true); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { iTelephony = (ITelephony) getITelephonyMethod.invoke(teleMgr, (Object[]) null); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
3.添加权限,及接收:
<receiver android:name="CallListener"><intent-filter><action android:name="android.intent.action.PHONE_STATE"></action><category android:name="android.intent.category.DEFAULT"></category></intent-filter><intent-filter><action android:name="android.intent.action.NEW_OUTGOING_CALL"></action><category android:name="android.intent.category.DEFAULT"></category></intent-filter><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"></action><category android:name="android.intent.category.DEFAULT"></category></intent-filter></receiver></application><!-- 新增撥出電話的權限 --><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permission android:name="android.permission.MODIFY_PHONE_STATE"></uses-permission><uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
4、页面XML:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent" android:layout_height="fill_parent"><LinearLayout android:id="@+id/linearLayout1"android:layout_alignParentTop="true" android:layout_height="wrap_content"android:layout_width="fill_parent" android:orientation="vertical"><TextView android:text="电话号码" android:id="@+id/phone_number"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_gravity="center"></TextView><TextView android:text="呢称" android:id="@+id/phone_name"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_gravity="center"></TextView></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content" android:orientation="horizontal"android:id="@+id/call_bottom_layout" android:layout_alignParentBottom="true"><Button android:layout_width="0dip" android:layout_weight="1"android:id="@+id/call_answer " android:layout_height="wrap_content"android:text="接听" android:visibility="gone"></Button><Button android:text="结束通话" android:id="@+id/call_end"android:layout_width="0dip" android:layout_height="wrap_content"android:layout_weight="1" android:visibility="gone"></Button><Button android:layout_width="0dip" android:layout_weight="1"android:id="@+id/call_cancel" android:layout_height="wrap_content"android:text="拒绝" android:visibility="gone"></Button></LinearLayout></RelativeLayout>
- Android电话秀(二)
- Android电话秀(三)
- android电话流程(打电话,接电话,挂断电话)(二)
- Android电话秀实现(一)
- 第十三篇 Android 系统电话管理机制二
- 第十三篇 Android 系统电话管理机制二 .
- Android(开发):拨打电话
- 金正昆电话礼仪讲座(二)
- Android电话
- 第十三篇 Android 系统电话管理机制与架构二
- android初识二(电话拨号器&短信发送器)
- 在android中监听呼出电话(电话拦截、修改呼出电话)
- 电话面试总结(二)
- 百度电话二面
- 电话面试总结二
- Android开发(一)拨打电话程序
- Android开发(一)拨打电话程序
- Android开发(一)拨打电话程序
- #ifdef __cplusplus 的用法
- C/C++函数调用规则
- vos2000安装方法
- 网段变更导致的网上邻居无法访问
- MVVM中轻松实现Command绑定(五)获取事件参数EventArgs(2)
- Android电话秀(二)
- C++函数调用过程深入分析
- php编程之文件上传与下载
- JS获取URL参数
- IAR调试S3C6410的笔记(二)
- hdu2050
- [观点]成为编程巨星的唯一秘诀
- 为什么编程是独一无二的职业
- 关于编程,理应传授的10件事