首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在报警设置时自动从扬声器开始呼叫

在报警设置时自动从扬声器开始呼叫
EN

Stack Overflow用户
提问于 2014-05-07 06:13:08
回答 1查看 429关注 0票数 1

我的应用程序是基于设置警报时间,并使呼叫自动启动在完美的时间与扬声器。我在用

代码语言:javascript
复制
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS"/>

在我的申请中。如果我们只考虑应用程序的话,它就能正常工作。但是奇怪的行为是在安装这个应用程序之后,当我不使用这个应用程序的时候,每次这个应用程序都是打开的,每次调用都是从扬声器开始的。如何克服这一问题??如果我不使用这个应用程序,或者想在我的应用程序中设置所有的权限限制,我不想让扬声器打开。你知道吗??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-07 11:34:29

定义boolean callFromApp=false; //来控制已从应用程序发出的调用boolean callFromOffHook=false; //来控制对空闲状态的更改是从app调用

开始呼叫:

代码语言:javascript
复制
 PhoneCallListener phoneListener = new  PhoneCallListener();
 TelephonyManager telephonyManager = 
(TelephonyManager).getSystemService(Context.TELEPHONY_SERVICE);
                 telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
                 Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:"+phoneNumber));             
                callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                startActivity(callIntent);
 callFromApp= true ; 

PhoneStateListener class

代码语言:javascript
复制
class PhoneCallListener extends PhoneStateListener {

    private boolean isPhoneCalling = false;



    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (TelephonyManager.CALL_STATE_RINGING == state) {
            // phone ringing


            if (callFromApp)
            {
              AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
              audioManager.setMode(AudioManager.MODE_IN_CALL);
              audioManager.setSpeakerphoneOn(true);
            }

        }

    if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            // active


            isPhoneCalling = true;

            if (callFromApp)
            {
              AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
              audioManager.setMode(AudioManager.MODE_IN_CALL);
              audioManager.setSpeakerphoneOn(true);
            }

    }

        if (TelephonyManager.CALL_STATE_IDLE == state) {
        // run when class initial and phone call ended, need detect flag



            if (isPhoneCalling) {

              isPhoneCalling = false;
              callFromApp = false;
                  AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
                    audioManager.setMode(AudioManager.MODE_NORMAL); //Deactivate loudspeaker
// Remove listener
                      PhoneCallListener phoneListener = new  PhoneCallListener();
                     TelephonyManager telephonyManager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
                     telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_NONE);

            }

            }
        }
    }

希望..。这会帮到你的。(它完美地工作而不影响其他人:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23510066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档