首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android中以编程方式打开内置均衡器?

如何在Android中以编程方式打开内置均衡器?
EN

Stack Overflow用户
提问于 2016-06-12 13:12:55
回答 3查看 7.6K关注 0票数 9

我见过许多应用程序在built均衡器中打开系统(谷歌播放音乐,Spotify,三星股票音乐播放器)。直接,而不必从头开始写自己的。这些应用程序是如何做到的?我找不到解决办法。

代码语言:javascript
复制
} else if (id == R.id.action_fx) {
        Intent intent = new Intent();
        intent.setAction("android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL");
        if ((intent.resolveActivity(getPackageManager()) != null)) {
            startActivity(intent);
        } else {
            Intent intent11 = new Intent(MainActivity.this, Help.class);
            intent11.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            startActivity(intent11);
            // No equalizer found :(
        }
        return true;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-12 14:00:28

下面的代码可以启动默认均衡器Activity

代码语言:javascript
复制
Intent intent = new Intent(AudioEffect
    .ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);

if ((intent.resolveActivity(getPackageManager()) != null)) {
    startActivityForResult(intent, REQUEST_EQ);
} else {
    // No equalizer found :(
}

Spotify做的基本一样,没有检查其他。

startActivityForResult()的必要性在文档中得到了解释

意图携带多个额外的播放器应用程序用于将必要的信息块传递给控制面板应用程序。 调用应用程序必须使用android.app.Activity#startActivityForResult(Intent, int)方法启动控制面板,以便指定其包名并由控制面板应用程序使用以跟踪此特定应用程序的更改。

票数 9
EN

Stack Overflow用户

发布于 2019-02-08 05:50:14

您需要,intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, mp.getAudioSessionId();)然后您需要,但是您需要一个MediaPlayer变量,您需要显示均衡器意图与audioSession和getPackageName在相同的意图effects.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, this.getPackageName());中,意图intent = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);具有音频和包名。先显示意图,然后是听觉动作和getpackagename,

那么在你需要的服务中。只有当不止一首歌在播放时。您需要在服务中使用以下代码,否则eqaulizer就不会总是工作。

代码语言:javascript
复制
public void openAudioFx() {
    Intent i = new Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION);
    i.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName);
    i.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, audioSession);
    this.sendBroadcast(i);
}

public void closeAudioFx() {
    Intent k = new Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION);
    k.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName);
    k.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, audioSession);
    this.sendBroadcast(k);
    } 

然后,您必须接收广播,使它一直工作,您需要一个int audioSession = 0;

和字符串getPackageName = getPackageName();

然后,您需要,广播包名称可能和音频,然后使用变量,而不是代码。eqaulizer显示意图、包名和音效是意图显示均衡器工作所必需的,只在活动中工作。

广播接收器我想试着用。全班,

代码语言:javascript
复制
public final BroadcastReceiver hello;
{
    hello = new BroadcastReceiver() {


        private static final String TAG = "mMessageReceiver";

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                String action = intent.getAction();


                switch (action) {
                    case AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION:
                        // Log.d(TAG_MAIN_ACTIVITY, action);


                        break;
                    case AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION:
                        break;
                    case AudioEffect.EXTRA_AUDIO_SESSION:
                        audioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, 0);


                        break;
                    case AudioEffect.EXTRA_PACKAGE_NAME:
                        // Log.d(TAG_MAIN_ACTIVITY, action);


                        break;

然后,您需要从服务中广播packagename,以便活动解决它。对于要求较高的变量,然后以某种方式使用字符串,对pacakename广播,然后在广播中使用更高的变量。然后把这个放进去,onCreate公共BroadcastReceiver打个招呼;

代码语言:javascript
复制
{
    hello = new BroadcastReceiver() {


        private static final String TAG = "mMessageReceiver";

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent != null) {
                String action = intent.getAction();


                switch (action) {
                    case AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION:
                        // Log.d(TAG_MAIN_ACTIVITY, action);
                        break;
                    case AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION:
                        break;
                    case AudioEffect.EXTRA_AUDIO_SESSION:
                        audioSession = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, 0);
                        break;
                    case AudioEffect.EXTRA_PACKAGE_NAME:
                        // Log.d(TAG_MAIN_ACTIVITY, action);
                        break;
                    }

    LocalBroadcastManager.getInstance(this).registerReceiver(hello, new IntentFilter("ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION"));
    LocalBroadcastManager.getInstance(this).registerReceiver(hello, new IntentFilter("ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION"));
    LocalBroadcastManager.getInstance(this).registerReceiver(hello, new IntentFilter("EXTRA_PACKAGE_NAME"));
    LocalBroadcastManager.getInstance(this).registerReceiver(hello, new IntentFilter("EXTRA_AUDIO_SESSION")); 

好了。希望它能起作用,如果有什么遗漏的话,让我知道我可能会做出回应。对不起,有些代码没有正确格式化,请阅读并将所有代码放在一起,然后如果您可以看到编写,代码后请分开。

票数 0
EN

Stack Overflow用户

发布于 2020-04-07 07:25:20

下面是我为在Android中打开内置均衡器而创建的函数,您只需要在下面的函数中传递活动上下文并给出会话ID。

代码语言:javascript
复制
    public static void openEqualizer(@NonNull final Activity activity) throws RemoteException {
    final int sessionId = MediaPlaybackServiceManager.sService.getAudioSessionId();
    if (sessionId == AudioEffect.ERROR_BAD_VALUE) {
        Toast.makeText(activity, "No Session Id", Toast.LENGTH_LONG).show();
    } else {
        try {
            final Intent effects = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);
            effects.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, "your app package name");
            effects.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId);
            effects.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC);
            activity.startActivityForResult(effects, 0);
        } catch (@NonNull final ActivityNotFoundException notFound) {
            Toast.makeText(activity, "There is no equalizer", Toast.LENGTH_SHORT).show();
        }
    }
}

上面的代码对我有用,我希望它也能适用于你.

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

https://stackoverflow.com/questions/37774660

复制
相关文章

相似问题

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