Cómo detectar el botón de volumen haga clic en el servicio de fondo o en el entorno nativo en Android?

Quiero detectar el evento de clic de botón de volumen en el servicio de fondo o en el entorno nativo en Android.I espero que pueda detectar el evento en cualquier momento.

He intentado el código de abajo con ContentObserver , pero esto puede detectar sólo el evento de cambio AUDIO_SERVICE , si la aplicación de primer plano se está ejecutando con música, este método no puede detectarlo, creo que es STREAM_MUSIC pero no AUDIO_SERVICE . Lo que quiero es detectar el volumen Haga clic en el botón en cualquier momento y haga clic en cualquier botón de volumen.

Alguien sabe como hacerlo? ¿Puedo implementarlo con C en código nativo?

 public class SettingsContentObserver extends ContentObserver { int previousVolume; Context context; public SettingsContentObserver(Context c, Handler handler) { super(handler); context=c; AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); previousVolume = audio.getStreamVolume(AudioManager.AUDIO_SERVICE); } @Override public boolean deliverSelfNotifications() { return super.deliverSelfNotifications(); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int currentVolume = audio.getStreamVolume(AudioManager.AUDIO_SERVICE); int delta=previousVolume-currentVolume; if(delta>0) { Logger.d("Volume Up!"); previousVolume=currentVolume; } else if(delta<0) { Logger.d("Volume Down!"); previousVolume=currentVolume; } } } 

Entonces en mi servicio onCreate regístrelo con:

 mSettingsContentObserver = new SettingsContentObserver(this,new Handler()); getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver ); 

A continuación, anule el registro en onDestroy:

 getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver); 

One Solution collect form web for “Cómo detectar el botón de volumen haga clic en el servicio de fondo o en el entorno nativo en Android?”

¿Has probado esto ?

 import android.provider.Settings; import android.provider.Settings.System; mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.VOLUME_SETTINGS[AudioManager.STREAM_M‌​USIC]), true, mVolumeObserver); 

La implementación de la misma en código nativo tal vez would't trabajo como usted necesita para vincular cada método de ContentObserver a las llamadas nativas, algo así:

 public class NativeContentObserver extends ContentObserver { public static final String TAG = "NativeContentObserver"; private native boolean natDeliverSelfNotifications(); private native void natDispatchChange(boolean selfChange, Uri uri); private native void natDispatchChange(boolean selfChange); private native void natOnChange(boolean selfChange, Uri uri); private native void natOnChange(boolean selfChange); /// ... Delegate work from here ... /// static { System.loadLibrary("NativeContentObserver"); } } 

Así que necesitas hacer el trabajo primero ContentObserver antes de ir al código nativo.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.