当我的应用程序运行时,硬件音量按钮不起作用

Posted

技术标签:

【中文标题】当我的应用程序运行时,硬件音量按钮不起作用【英文标题】:Hardware volume buttons are not working when my app is running 【发布时间】:2013-12-17 19:43:21 【问题描述】:

我一直在开发一个播放音频的应用程序。我目前正在将音频作为 STREAM_MUSIC 类型的流播放,并且效果很好。我希望能够使用设备上的硬件音量控件来控制音量。当我在应用程序中时,硬件按钮不做任何事情,音量不会改变,吐司也不会弹出。然后我按下主页按钮,使应用程序在后台运行,硬件音量按钮工作。它们仅在我的应用程序在后台运行时才起作用。

我尝试在我的onCreate() 方法中使用代码this.setVolumeControlStream(AudioManager.STREAM_MUSIC);,但这并没有改变应用程序的行为,我仍然面临同样的问题。

我还在 DROID 2、DROID RAZR、Samsung Galaxy s3、Samsung Galaxy s4、Lenovo 平板电脑和有根 DROID 2 上进行了测试,但它们的行为都相同。

 public void onCreate(Bundle savedInstanceState)

    super.onCreate(savedInstanceState);
    AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    setVolumeControlStream(audio.STREAM_MUSIC); //this line should set up the hardware
    //buttons to control the volume 
    if (QtApplication.m_delegateObject != null && QtApplication.onCreate != null) 
        QtApplication.invokeDelegateMethod(QtApplication.onCreate, savedInstanceState);
        return;
    

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    try 
        m_activityInfo = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
     catch (NameNotFoundException e) 
        e.printStackTrace();
        finish();
        return;
    

    if (null == getLastNonConfigurationInstance()) 
        // if splash screen is defined, then show it
        if (m_activityInfo.metaData.containsKey("android.app.splash_screen") )
            setContentView(m_activityInfo.metaData.getInt("android.app.splash_screen"));
        startApp(true);
    

【问题讨论】:

【参考方案1】:

您可能很想尝试聆听音量键按下并以这种方式修改音频流的音量。忍住冲动。 Android 提供了方便的 setVolumeControlStream() 方法来将音量键按下定向到您指定的音频流。

看看这个,我认为它可能会有所帮助:Use Hardware Volume Keys to Control Your App’s Audio Volume

编辑:

在你的oncreate 方法上你必须做的:

 this.setVolumeControlStream(AudioManager.STREAM_MUSIC); //if you use AudioManager.STREAM_MUSIC to load the sound
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() 
      @Override
      public void onLoadComplete(SoundPool soundPool, int sampleId,
          int status) 
        loaded = true;
      
    );
   soundPool.load(this, R.raw.sound1, 1); // your sound

【讨论】:

我尝试在我的 onCreate() 方法中使用 setVolumeControlStream() 并没有改变任何东西。 如果您向我们展示您已经编写的代码,我们可能会有所帮助。 @kobihudson 我看不到您在哪里加载声音,但我会更新我的答案,希望对您有所帮助。 谢谢,我认为这可能会有所帮助。

以上是关于当我的应用程序运行时,硬件音量按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章

matlab exe文件中的按钮不起作用

屏幕关闭时识别音量按钮按下 Android

Android 地图:我的位置按钮在活动首次启动时不起作用

在 Xcode 12 上运行应用程序时按钮不起作用 [重复]

为啥 setOnClickPendingIntent 不起作用?

当我使用Process.Start运行python程序时,我的python程序中的日志不起作用?