registerMediaButtonEventReceiver未接收事件

Ton*_*Ton 7 android volume

我正在尝试接收物理按钮事件,例如手机侧面的音量按钮点击.我需要在服务中执行此操作,因为如果用户随时单击"音量调高/调低"按钮,我希望收到该消息.我在网上看了很多,但我不能让它工作,不知道什么是错的.这是我的代码:

在清单中:

    <receiver android:name=".clsMediaButtonReceiver" >
        <intent-filter android:priority="1000" >
            <action android:name="android.intent.action.MEDIA_BUTTON" />               
        </intent-filter>
    </receiver>  
Run Code Online (Sandbox Code Playgroud)

在服务OnStart()中:

   AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE);
   manager.registerMediaButtonEventReceiver(new ComponentName(getPackageName(), clsMediaButtonReceiver.class.getName())); 
Run Code Online (Sandbox Code Playgroud)

一个broascastreceiver:

public class clsMediaButtonReceiver extends BroadcastReceiver
{  

   @Override public void onReceive(Context context, Intent intent)
   {  //This is never shown
      Toast toast1 = Toast.makeText(Context, intent.getAction(), Toast.LENGTH_SHORT);
      toast1.show();
   }

} 
Run Code Online (Sandbox Code Playgroud)

小智 9

我添加<action android:name="android.media.VOLUME_CHANGED_ACTION" />到我的意图过滤器,现在我得到了音量键事件.我还没弄明白如何在我的应用程序中正确分发它们...希望它有所帮助!


Jaf*_*tes 0

我和你有同样的问题,想知道你是否解决了。与我的代码的区别在于我\xc2\xb4ve在另一个类中的broadcastReceiver类。像这样的东西:

\n\n
public class MyClass extends Activity \n{\n    /// Code\n\n    public class MediaButtonReceiver extends BroadcastReceiver\n    {\n         @Override\n         public void onReceive(Context context, Intent intent)\n         {\n              /// Code\n         }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

和清单:

\n\n
<receiver android:name="net.mypackage.MyClass.MediaButtonReceiver">\n    <intent-filter android:priority="1000" >\n        <action android:name="android.intent.action.MEDIA_BUTTON" />               \n    </intent-filter>\n</receiver>\n
Run Code Online (Sandbox Code Playgroud)\n\n

感谢您的帮助

\n