恢复出厂设置后将android.intent.category.default设置为自定义应用程序

时间:2013-08-23 09:26:31

标签: android-intent settings android-source

情形: 预注意:我们希望为已知的手机或平板电脑制造商提供定制的Android构建。

E.g。 android sys提供了一个电子邮件应用程序,在其AndroidManifest.xml中标记了intent-filter类别标记“android.intent.category.default”。 相信我们开发了另一个更酷,令人兴奋;-)电子邮件应用程序,并在Manifest中声明了“android.intent.category.default”intent.filter类别。 当然,我们将应用程序设置为默认选择屏幕,该应用程序始终使用该应用程序。当然,用户永远不会清除应用程序设置中的默认值,并始终使用星球上最好的电子邮件应用程序: - )。

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

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

一种可能的方法是从androids默认电子邮件应用Manifest中删除默认类别intent-filter。我们不想这样做。

3 个答案:

答案 0 :(得分: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将仅考虑具有较高优先级值的那些作为意图的潜在目标。 它控制执行广播接收器以接收广播消息的顺序。具有较高优先级值的那些在具有较低值的那些之前被调用。 (该命令仅适用于同步消息;异步消息会忽略它。) 仅当您确实需要强制接收广播的特定订单时,或者想要强制Android更喜欢一项活动而不是其他活动时,才使用此属性。

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

答案 1 :(得分:0)

让我重新开始....我用这个优先级属性玩了一下。

我在清单中创建了一个新的Homescreen应用程序,其中包含以下活动代码段:

<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具有相同的&lt; intent-filter&gt;部分除了“优先属性”。

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

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

<preferred-activities/>
此包限制文件中的

标记。我认为这个优先级可能会自动添加这样的输入。

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

答案 2 :(得分: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或任何其他应用程序处于活动状态时,我按“Home”btn:

W/AudioPolicyManagerBase(  129): getDeviceForStrategy() unknown strategy: 6
W/AudioPolicyManagerBase(  129): getDeviceForStrategy() unknown strategy: 6