首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Audio Focus Listener在服务中不工作

Android Audio Focus Listener在服务中不工作
EN

Stack Overflow用户
提问于 2020-05-18 11:13:16
回答 1查看 480关注 0票数 0

我有播放音调服务,其中我必须等待音频焦点播放音调。

下面是我实现的代码:

代码语言:javascript
运行
复制
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioAttributes;
import android.media.AudioFocusRequest;
import android.media.AudioManager;
import android.media.ToneGenerator;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.util.Log;

public class PlayToneService extends Service implements AudioManager.OnAudioFocusChangeListener {
    private static final String TAG = "PlayToneService";

    public PlayToneService() {
    }

    @Override
    public void onCreate() {
        super.onCreate();

        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        Log.d(TAG,"AudioManager.requestAudioFocus...");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
                    .setAudioAttributes(
                            new AudioAttributes.Builder()
                                    .setUsage(AudioAttributes.USAGE_MEDIA)
                                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                                    .build()
                    )
                    .setAcceptsDelayedFocusGain(true)
                    .setOnAudioFocusChangeListener(this).build()
            );
        } else {

            audioManager.requestAudioFocus(this,
                    AudioManager.STREAM_MUSIC,
                    AudioManager.AUDIOFOCUS_GAIN);
        }



    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            // You now have the audio focus and may play sound.
            final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 500);
            tg.startTone(ToneGenerator.TONE_PROP_BEEP);
            Log.d(TAG,"AudioManager.AUDIOFOCUS_REQUEST_Sucess...");

            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                public void run() {
                    tg.release();
                    stopSelf();
                }
            },550);
        }
        else if (focusChange == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
            // Handle the failure.
            Log.d(TAG,"AudioManager.AUDIOFOCUS_REQUEST_FAILED ...");
            stopSelf();

        }

    }
}

我的onAudioFocusChange侦听器没有收到任何回调。我的onAudioFocusChange列表程序中没有记录器打印功能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-13 02:10:07

您的AudioFocusChangeListener实例不会在首次请求AudioManager时被调用(例如,调用requestAudioFocus())。使用requestAudioFocus()的返回值来确定您最初是否已从系统获得音频焦点。任何后续的更改都应该调用您的更改侦听器以获得焦点。

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

https://stackoverflow.com/questions/61861860

复制
相关文章

相似问题

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