如何从外部(汽车)显示器拦截我的 Android 应用程序中的“触摸屏事件”?

问题描述 投票:0回答:1

这是处理 Android 上我的实际 MediaPlayerService 类的 MediaSession 的代码部分(API 级别 30):

@Override
    public void onCreate() {
        super.onCreate();

        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .build());

        mediaSession = new MediaSessionCompat(this, TAG);
        mediaSession.setCallback(new MediaSessionCallback());
        mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
                MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

        playbackStateBuilder = new PlaybackStateCompat.Builder()
                .setActions(PlaybackStateCompat.ACTION_PLAY |
                        PlaybackStateCompat.ACTION_PAUSE |
                        PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS |
                        PlaybackStateCompat.ACTION_SKIP_TO_NEXT);

        mediaSession.setPlaybackState(playbackStateBuilder.build());
        mediaSession.setActive(true);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
        if (mediaSession != null) {
            mediaSession.release();
        }
    }

    private class MediaSessionCallback extends MediaSessionCompat.Callback {
        @Override
        public void onPlay() {
            super.onPlay();
            play();
        }

        @Override
        public void onPause() {
            super.onPause();
            pause();
        }

        @Override
        public void onSkipToNext() {
            super.onSkipToNext();
            playSong(1);
        }

        @Override
        public void onSkipToPrevious() {
            super.onSkipToPrevious();
            playSong(-1);
        }
    }

基本上,它是一个音乐播放器,一旦通过蓝牙连接,就会从我的汽车接收命令(播放下一个、上一个,等等)。

我想做的是拦截我的车载显示屏的触摸(可以这么说,其中显示歌曲/艺术家信息)。

有些人认为“触摸 -> 触发我的应用程序上的方法”。

我怎样才能实现这个目标?是否可以?谢谢

java android media
1个回答
0
投票

考虑到当前的 Android API 和汽车信息娱乐系统的标准实践,直接从汽车显示屏拦截触摸事件来控制 Android 应用程序似乎并不可行。

Android 的输入事件系统 旨在处理来自直接连接或与设备集成的设备(例如设备的触摸屏、物理按钮、传感器)的触摸、按键和其他输入事件。
外部显示器,尤其是那些未明确设计用于 Android 输入系统的显示器,不会以 Android 应用程序可以拦截的方式直接将触摸事件发送到连接的 Android 设备。

大多数车载显示器独立于连接的设备运行。当您将 Android 设备连接到汽车的信息娱乐系统(通过蓝牙、USB 或其他)时,连接通常仅限于特定协议(例如,用于音频流、呼叫处理或显示元数据)。这些协议不包括将触摸事件从汽车显示屏转发到连接的 Android 设备的标准。

此外,允许外部设备直接将输入事件注入 Android 设备将引发重大的安全和隐私问题。这将使恶意设备更容易模仿用户输入,从而可能导致未经授权的操作。

© www.soinside.com 2019 - 2024. All rights reserved.