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>


 

原创粉丝点击