如何设置Android TV应用使其无法启动且隐藏启动选项?
要实现这个需求,核心是修改AndroidManifest.xml里的组件配置,让系统识别不到应用的启动入口,具体操作如下:
移除所有启动类Intent Filter
删掉AndroidManifest.xml中所有包含ACTION_MAIN、CATEGORY_LAUNCHER或CATEGORY_LEANBACK_LAUNCHER的intent-filter——这三个是Android(包括TV端)识别应用启动入口的关键标记,移除后系统就不会在应用设置或桌面显示启动选项。合理设置组件的
exported属性
如果应用的Activity、Service等组件不需要被外部调用,将android:exported设为false,彻底阻止外部启动;如果需要被系统或内部关联组件启动,可保留exported="true"但仅使用自定义Intent Action,比如:<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="com.yourcompany.yourapp.CUSTOM_START_ACTION" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>这种情况下只有知道该自定义Action的组件才能启动你的应用,用户在设置里看不到任何启动入口。
清理冗余的可触发Intent Filter
检查并移除其他可能让应用被启动的Intent Filter(比如ACTION_VIEW、ACTION_SEND等),如果业务必须保留,就通过data标签限制触发条件,避免用户或其他应用意外启动。
举个修改前后的对比:
修改前(带启动入口):
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> </intent-filter> </activity>
修改后(无用户可触发的启动入口):
<activity android:name=".MainActivity" android:exported="false"> <!-- 无启动类Intent Filter --> </activity>
注意:如果应用需要后台运行,可通过广播接收器(比如监听开机完成广播RECEIVER_BOOT_COMPLETED)或系统绑定服务来触发初始化,全程不需要用户手动启动。
内容的提问来源于stack exchange,提问作者Enrico Ancis

