如何解决蓝牙耳塞触摸手势应触发应用程序中的 onClick 侦听器
我正在尝试制作一个 android 应用程序,当在配对的蓝牙耳塞(耳塞支持触摸手势)上执行任何触摸手势时,它会触发应用程序中的点击侦听器/某些操作。谷歌搜索了很多,但仍然无法使其工作。根据接收到的意图的动作,想弄清楚手势是什么,然后相应地在我的应用程序中触发一些动作。任何人都可以指导我或指出我正确的方法吗?提前致谢。
我的设备是 android 9,api 级别 28。想让它适用于版本 >= 8 的 android 设备。
尝试了以下内容:
- 注册了一个监听器并将意图过滤器的优先级设置为 2147483647,但无法在 onReceive 方法中接收广播。
- 尝试在 onKeyDown/onKeyUp/dispatchKeyEvent 中捕获键事件,但未在这些方法中接收调用。
- 尝试使用 Media Session 类并设置回调和播放状态并将其设置为 Active,但未收到 onMediaButtonEvent 或回调的任何重写方法中的调用。
第一种方法:
AndroidManifest.xml
内部应用程序标签:
<receiver android:name="MediaButtonBroadcastReceiver" android:enabled="true">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
外部应用标签:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
onCreate() 中的 MainActivity.java
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
ComponentName mReceiverComponent = new ComponentName(this,MediaButtonBroadcastReceiver.class);
mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent)
MediaButtonBroadcastReceiver.java
public class MediaButtonBroadcastReceiver extends BroadcastReceiver {
// Constructor is mandatory
public MediaButtonBroadcastReceiver ()
{
super ();
}
@Override
public void onReceive(Context context,Intent intent) {
Toast.makeText(context,"Hello2 ",Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}
第二种方法: 在 MainActivity.java 的 onCreate() 中添加了这些 -
@Override
public boolean onKeyDown(int keyCode,KeyEvent event) {
Toast.makeText(this,"Hello1 ",Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onKeyLongPress(int keyCode,KeyEvent event) {\
Toast.makeText(this,"Hello3 ",Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onKeyUp(int keyCode,"Hello4 ",Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {\
Toast.makeText(this,"Hello5 ",Toast.LENGTH_SHORT).show();
return super.dispatchKeyEvent(event);
}
第三种方法 -
MediaSession.Callback callback = new MediaSession.Callback() {
@Override
public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
Log.e("KISHIE","HELLO");
Toast toast= Toast. makeText(getApplicationContext(),"Hello ",Toast. LENGTH_SHORT);
toast.setMargin(50,50);
toast.show();
return true;
}
@Override
public void onPlay() {
Log.e("KISHIE","HELLO");
}
@Override
public void onPause() {
Log.e("KISHIE","HELLO");
}
@Override
public void onSkipToNext() {
Log.e("KISHIE","HELLO");
}
@Override
public void onSkipToPrevious() {
Log.e("KISHIE","HELLO");
}
@Override
public void onFastForward() {
Log.e("KISHIE","HELLO");
}
@Override
public void onRewind() {
Log.e("KISHIE","HELLO");
}
@Override
public void onStop() {
Log.e("KISHIE","HELLO");
}
};
MediaSession mediaSession = new MediaSession(getApplicationContext(),"KISHIE"); // Debugging tag,any string
mediaSession.setFlags( MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
mediaSession.setCallback(callback);
// Set up what actions you support and the state of your player
PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_PLAY_PAUSE)
.setState(PlaybackState.STATE_PLAYING,0)
.build();
mediaSession.setPlaybackState(state);
// Call this when you start playback after receiving audio focus
mediaSession.setActive(true);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。