0

场景:前注:我们希望像已知的手机或平板电脑制造商那样为客户提供定制的 android 版本。

例如,android sys 提供了一个电子邮件应用程序,该应用程序在其 AndroidManifest.xml 中使用意图过滤器类别标签“android.intent.category.default”进行标记。相信我们开发了另一个更酷、更令人兴奋的 ;-) 电子邮件应用程序,并且还在 Manifest 中声明了“android.intent.category.default”intent.filter 类别。当然,当涉及到始终使用哪个应用程序的选择屏幕时,我们将我们的应用程序设置为默认值。当然,用户永远不会清除应用程序设置中的默认设置,并始终使用地球上最好的电子邮件应用程序 :-)。

用户决定执行完全出厂设备重置。下次用户启动电子邮件应用程序时,他/她将最终获得“选择覆盖”以选择要继续的电子邮件应用程序。

如何通过在设备启动时将电子邮件应用程序设置为默认设置来省略此选择屏幕?android 在哪里存储以前选择的默认应用设置?

一种可能的方法是从 androids 默认电子邮件应用程序清单中删除默认类别意图过滤器。我们不想这样做。

4

3 回答 3

0

logcat 输出:
1)新的主屏幕处于活动状态,我按下按钮打开 Launcher2(按意图),Launcher2 打开:

W/AudioPolicyManagerBase(  129): getDeviceForStrategy() unknown strategy: 6
D/dalvikvm( 1436): GC_CONCURRENT freed 180K, 6% free 5535K/5868K, paused 1ms+3ms, total 30ms
D/dalvikvm( 1436): WAIT_FOR_CONCURRENT_GC blocked 25ms
D/dalvikvm( 1436): GC_CONCURRENT freed 295K, 8% free 5722K/6168K, paused 5ms+6ms, total 39ms
D/libEGL  ( 1436): loaded /system/lib/egl/libEGL_tegra.so
D/libEGL  ( 1436): loaded /system/lib/egl/libGLESv1_CM_tegra.so
D/libEGL  ( 1436): loaded /system/lib/egl/libGLESv2_tegra.so
D/OpenGLRenderer( 1436): Enabling debug mode 0
D/dalvikvm( 1436): GC_CONCURRENT freed 208K, 6% free 5967K/6324K, paused 3ms+3ms, total 28ms
I/ActivityManager(  486): Displayed com.android.launcher/com.android.launcher2.Launcher: +653ms
D/dalvikvm( 1436): GC_CONCURRENT freed 247K, 8% free 6145K/6612K, paused 6ms+2ms, total 36ms
D/dalvikvm( 1436): WAIT_FOR_CONCURRENT_GC blocked 6ms
D/dalvikvm( 1436): GC_FOR_ALLOC freed 250K, 8% free 6254K/6780K, paused 31ms, total 31ms
I/dalvikvm-heap( 1436): Grow heap (frag case) to 7.235MB for 313616-byte allocation
D/dalvikvm( 1436): GC_CONCURRENT freed 147K, 7% free 6696K/7160K, paused 3ms+2ms, total 27ms

2)当 Launcher2 或任何其他应用程序处于活动状态时,我按“主页”按钮:

W/AudioPolicyManagerBase(  129): getDeviceForStrategy() unknown strategy: 6
W/AudioPolicyManagerBase(  129): getDeviceForStrategy() unknown strategy: 6
于 2013-08-28T11:13:52.900 回答
0

我想你可能需要这个选项:

安卓:优先级=“2”

<intent-filter android:priority="2">
    <action android:name="xxxxxxxxxxxxxxxxxx" />
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

您可能会在类似应用程序的“启动向导”中找到它。例如,GoogleServiceFramework.apk 中的一个与 GMS 包一起提供。你可以看到这个意图过滤器使向导应用程序在主屏幕应用程序(启动器)中占主导地位,并在恢复出厂设置后在主屏幕之前启动。用户不需要为意图“家”选择应采取的行动。向导完成后,它将自行禁用,然后显示主屏幕。

请参考http://developer.android.com/guide/topics/manifest/intent-filter-element.html#priority

在处理过滤器描述的类型的意图方面,应给予父组件的优先级。该属性对活动和广播接收器都有意义:它提供了有关活动如何响应与过滤器匹配的意图的信息,相对于也可以响应该意图的其他活动。当一个意图可以由具有不同优先级的多个活动处理时,Android 将只考虑那些具有较高优先级值的活动作为该意图的潜在目标。它控制执行广播接收器以接收广播消息的顺序。具有较高优先级值的那些在具有较低值的那些之前被调用。(该顺序仅适用于同步消息;对于异步消息,它会被忽略。

该值必须是整数,例如“100”。数字越大优先级越高。默认值为 0。该值必须大于 -1000 且小于 1000。

于 2013-08-26T07:12:50.147 回答
0

让我重新开始......我用那个priority属性玩了一下。

我创建了一个新的主屏幕应用程序,在清单中具有以下活动片段:

<activity 
 android:name="com.example.homescreen.HomescreenActivity"
 android:launchMode="singleInstance" 
 android:screenOrientation="landscape" > 
 <intent-filter android:priority="2" >
   <action android:name="android.intent.action.MAIN" /> 
   <category android:name="android.intent.category.HOME" /> 
   <category android:name="android.intent.category.DEFAULT" /> 
 </intent-filter>
</activity>

Androids Launcher2 具有相同的 <intent-filter> 部分,除了“优先级属性”。

场景 1:
我将新的主屏幕设置为主屏幕的默认应用程序。然后我进行完全恢复出厂设置以检查是否必须在启动后再次设置默认主屏幕。
我的 UI 中有一个 btn 发送启动 Launcher2 的意图。Android 的 Launcher2 成功启动后,我按下了“Home”btn(硬件键)。或者从 Launcher2 的应用程序网格启动一个应用程序,然后按“主页”按钮。
结果:“主页”无效,应用程序未退出,Launcher2 也未返回新的主屏幕应用程序。

场景 2:
我没有在我的新主屏幕应用程序中使用优先级属性,但当 Android 检测到添加/下载了新主屏幕时,我最初将此应用程序设置为默认启动器。
在这里,如果我检查文件系统:/data/system/users/0/package-restrictions.xml,则此 xml 具有以下标记,其中填充了我的新主屏幕应用程序。

<preferred-activities>
  <item name="com.example.homescreen/.HomescreenActivity" match="100000" set="2">
    <set name="com.example.homescreen/.HomescreenActivity" />
    <set name="com.android.launcher/com.android.launcher2.Launcher" />
    <filter>
      <action name="android.intent.action.MAIN" />
      <cat name="android.intent.category.HOME" />
      <cat name="android.intent.category.DEFAULT" />
    </filter>
  </item>
</preferred-activities>

如果我现在继续执行与以前相同的步骤,执行恢复出厂设置,我需要再次设置默认主屏幕。但如果我这样做并按下“主页”按钮,我将始终返回到我的新主屏幕应用程序。我也想知道为什么在场景1中,我只有一个空的

<preferred-activities/>

这个包限制文件中的标签。我认为这个优先级可能会自动添加我这样的条目。

所以我想要存档的是我完全重置,下次不必选择我的默认主屏幕应用程序。
对于其他不是主屏幕启动器应用程序的应用程序也是如此。

于 2013-08-27T17:52:57.133 回答