我通过代码为活动创建了一些快捷方式,其中大多数无法打开其相关活动。我发现只有将过滤器CREATE_SHORTCUT添加到活动中,它才起作用。为什么?
<activity
android:name=".ui.Main"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
(在Go Launcher和MIUI 2.3.7中进行测试)
我在下面看到日志,是否应该添加MAIN过滤器?
09-27 13:34:44.075:E / Launcher(7893):启动器无权
启动Intent {act = android.intent.action.VIEW
flg = 0x10000000 cmp = /。ui.Activity2 bnds = [349, 76] [469,211]}。确保为相应的活动创建MAIN目的过滤器,或为此活动使用导出的属性。
如错误消息所示,您可以添加
android:exported="true"
Run Code Online (Sandbox Code Playgroud)
对你的活动。
虽然如果我正确阅读android文档,则应该将其作为默认值:
android:exported
活动是否可以由其他应用程序的组件启动-如果可以,则为“ true”,否则为“ false”。如果为“ false”,则该活动只能由相同应用程序或具有相同用户ID的应用程序的组件启动。默认值取决于活动是否包含意图过滤器。缺少任何过滤器意味着只能通过指定活动的确切类名来调用该活动。这意味着该活动仅用于应用程序内部使用(因为其他人不知道类名)。因此,在这种情况下,默认值为“ false”。另一方面,至少有一个过滤器的存在意味着该活动是供外部使用的,因此默认值为“ true”。
也许其他人可以澄清这一点。
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |