示例Android应用程序演示电话api?

时间:2010-11-28 18:25:05

标签: android

是否有任何示例应用程序演示了Android的Telephony API的功能?我有兴趣获得呼叫通知/来电号码等(我理解它可以使用PhoneStateListener)。此外,第三方应用程序是否可以更改传入呼叫窗口/传出呼叫窗口(基本上是为了给用户一个额外的按钮来搜索来自REST服务的传入号码)?

任何有用的链接或示例应用程序都会非常有用。有什么建议 ?

1 个答案:

答案 0 :(得分:4)

PhoneStateListener告诉您的应用有关电话活动的信息。以下是我的一个应用程序中的一些示例代码,可以在手机处于活动状态时暂停音乐:

/**
 * Helper class to pause music while a phone call is in progress.
 * 
 * The Android emulator can simulate an outgoing call by clicking
 * the phone button and dialing normally.  Simulate an incoming call
 * by starting the emulator, "telnet localhost 5554" then enter 
 * "gsm call 5551234" into the telnet session.  
 */
private class MusicServicePhoneStateListener extends PhoneStateListener {
    private boolean mResumeAfterCall = false;

    @Override
    public void onCallStateChanged(int state, String incoming_number) {
        switch (state) {
        case TelephonyManager.CALL_STATE_OFFHOOK:
        case TelephonyManager.CALL_STATE_RINGING:
            Log.i(tag, "phone active, suspending music service");
            mResumeAfterCall = mMediaPlayer.isPlaying();
            mMediaPlayer.pause();
            break;
        case TelephonyManager.CALL_STATE_IDLE:
            Log.i(tag, "phone inactive, resuming music service");
            if (mResumeAfterCall) {
                mMediaPlayer.start();
            }
            break;
        default:
            break;
        }
    }
}

通过以下方式在onCreate中创建并启动监听器:

    mPhoneListener = new MusicServicePhoneStateListener();
    ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);

使用以下命令停止onDestroy中的监听器:

    ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(mPhoneListener, 0);

至于修改来电对话框,best suggestion I've found将使用短暂延迟,然后是自定义Toast消息(延迟使您的Toast出现在来电对话框“上方”)。