如何在TvInputService覆盖视图中接收输入事件

时间:2018-01-23 15:53:39

标签: android-tv

Tv Input Framework (TIF) documentaition说:

  

只有系统电视输入才有资格接收InputEvents,并且只有他们拥有RECEIVE_INPUT_EVENT系统权限。 TV Input负责确定要使用哪个InputEvent,并允许TV App处理它不需要消耗的密钥。

RECEIVE_INPUT_EVENT似乎是系统权限。 尝试通过adb启用它失败:

$ adb shell pm grant com.example.mytvinput \
  com.android.tv.permission.RECEIVE_INPUT_EVENT

Operation not allowed: java.lang.SecurityException: Permission 
com.android.tv.permission.RECEIVE_INPUT_EVENT is not a changeable permission type

Android Open Source Project (AOSP) sources表示RECEIVE_INPUT_EVENT权限为signatureOrSystem类型,后者又由Android Permission documentation定义为:

  

系统仅授予Android系统映像中的应用程序或使用与声明权限的应用程序使用相同证书签名的权限。

如何开发消费输入的Android Tv输入服务的叠加层(例如HbbTv)?

我是否必须将开发的Tv输入编译成android图像才能开发它?

1 个答案:

答案 0 :(得分:1)

您应该在/system/priv-app

中安装您的应用程序 对于需要比其他人更多权限的应用程序,

/system/priv-app是一个特殊的地方。

步骤一步

要启动具有可写系统分区的仿真器,应使用-writable-system标志。

./emulator -writable-system -avd Oreo_Android_TV_1080p_API_26

下一步使用

重新安装/system分区
adb root
adb remount

接下来将您的应用程序移至/system/priv-app并重新启动

adb shell mv /data/app/com.example.myinput /system/priv-app/com.example.myinput

来源

Android Emulator Command Line doc, explaining -writable-service flag

What is the difference between system apps and privileged apps on Android?