Android 如何在播放(说出)来电者姓名,然后再次拨打电话时停止电话铃声

Android 如何在播放(说出)来电者姓名,然后再次拨打电话时停止电话铃声,android,Android,当电话铃响时,我想说出呼叫者的名字。我知道如何把来电号码和他的名字联系起来 String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); Uri uri = Uri.withAppendedPath(PhoneLookup.CONT

当电话铃响时,我想说出呼叫者的名字。我知道如何把来电号码和他的名字联系起来

String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

        Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(incomingNumber)); 
        Cursor cursor = context.getContentResolver().query(uri, new String [] {PhoneLookup.DISPLAY_NAME}, null, null, null);

        if (cursor.moveToFirst()) {
            callerName = cursor.getString(0);
        }

        Log.d(TAG, "Display name: " + callerName);
我知道如何使用android.intent.action.PHONE_STATE进行监听,并在手机开始鸣响时捕捉它

我还知道如何使用
TextToSpeech.OnInitListener
说出呼叫者姓名,但我在如何停止响铃并播放呼叫者姓名,然后再次开始响铃时遇到了问题


如何在未播放来电者姓名之前停止响铃?我正在寻找,但找不到解决办法。

恐怕不可能。Android reference没有涵盖这一点,但我已经测试了一段时间,我只能在通话的早期阶段(在你听到声音之前)控制振铃器的音量。您在发出声音后所做的每一项更改都将在通话结束后生效(因此,在下一次通话中)。虽然我不知道其他流的行为是什么,但我只对这个流感兴趣(但我想这并不重要,因为您不能使流静音)。

您可以在TTS运行时尝试使用setStreamMute禁用环流。请看Michael,我已经在audioManager.setStreamMute(audioManager.STREAM_RING,true)上尝试过了,然后播放TTS,但不起作用。你可能有什么想法或例子吗?你也可以试试
setStreamVolume
。你的应用程序是否具有android.permission.MODIFY_AUDIO_SETTINGS权限?不完全是。但是AudioService类中有一个表(您不能更改),它为每个流类型指定是否应该使用另一个流的卷。碰巧通知使用了环的体积。您可以将TTS作为音乐播放吗?使用AudioFocus listener,您可以停止铃声或暂停铃声。