【问题标题】:How to disable the Clear Data button in Application info of Manage application如何在管理应用程序的应用程序信息中禁用清除数据按钮
【发布时间】:2011-09-25 17:56:30
【问题描述】:

我正在使用 android 2.2,在 android manifest 的应用程序选项卡中提供“允许清除数据”选项以设置 true 或 false。但是将其设置为 False 后,我的应用程序无法禁用管理应用程序的应用程序信息中的清除数据按钮。当应用程序在 Data/Data/packge-name/databases/ 中包含数据库时,我遇到了这个问题。

我必须保护我的应用程序数据库不被用户访问。

【问题讨论】:

  • 接受的答案是错误的!!你能改变一下吗? android:manageSpaceActivity=".ActivityOfMyChoice" 启动要打开的活动。请参阅下面的答案

标签: android sqlite


【解决方案1】:

没有办法阻止用户清除您的应用数据。您提到的清单选项仅适用于系统应用程序,您作为开发人员无法安装系统应用程序。

详情请参阅this discussion - 特别是来自 Diane Hackborn(Android 框架工程师)的this 回复

【讨论】:

  • 感谢您的回答,请问有什么方法可以阻止用户访问数据库吗?
  • 如果它存储在设备上则不会 - 当应用程序卸载时它将被删除,用户将始终能够通过清除数据选项进行删除。如果数据是只读的,则将其放置在应用程序资源中,并在应用程序执行时根据需要进行恢复。如果数据需要更改或更新,我认为您需要将其远程存储,然后您必须处理通过互联网访问它。
  • 如果您观察到Android Market的清除数据也将其重置为初始阶段。所以如果有什么办法,那么他们应该在市场上实施它。
  • -1:这是错误的。请参阅下面的答案。您也可以在清单中使用:android:allowClearUserData="false" 属性。
  • @Borg8 您不能直接使用该命令,这些选项仅适用于 Mediaprovider 等系统应用程序,为了使用该选项,您必须让自己的硬件由 android 操作系统驱动。请参阅下面的讨论,它告诉您不要混淆该选项。groups.google.com/forum/#!topic/android-developers/hrW8OI_u2T4
【解决方案2】:

android:manageSpaceActivity=".ActivityOfMyChoice" 添加到您的清单的application 标记中,例如:

    <application android:label="MyApp" android:icon="@drawable/icon" 
                 android:manageSpaceActivity=".ActivityOfMyChoice">

然后不是"Clear Data",而是"Manage Space" 的按钮,它启动ActivityOfMyChoice

据我所知,这 100% 的时间都有效。

【讨论】:

  • Jakar 的解决方案:太棒了:-)。工作...模拟器和Acer Liquid Mini,Android 2.1。请注意,您将该属性放在标记&lt;application&gt;AndroidManifest.xml 中。它甚至会打开子活动,只是系统会以正常方式调用它,所以不要设计为调用startActivity()时向它传输数据。
  • 注意:尽量保留完整的包名。我尝试过像 .activities.ManageSpaceActivity 这样导致设置在 Lollipop 中崩溃。但是,给出完整的包名称是可行的。 :)
  • @Saty 我不记得我尝试过哪些,但您可以随时查看,如果您遇到任何问题,请告诉我:)
  • 在 Android 5.+ 和 Android 6 上工作,谢谢。
【解决方案3】:

AndroidManifest.xml

<application
    android:manageSpaceActivity="[packageName].ManageSpaceActivity"
    ...
    ...
>


  <activity
    android:name="[packageName].ManageSpaceActivity"
    android:screenOrientation="portrait" />

它会调用我的活动,但是:

public class ManageSpaceActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        finish();

    }// onCreate
}

Activity 在创建时已经死了,我喜欢技巧 :)

现在您可以随意按“管理空间”! :)) - 如果您需要,您可以在ManageSpaceActivity 进行自定义数据/缓存删除,但您可以保留您想要的数据。

请对 Jakar 回答投票!

【讨论】:

  • 另外,不要盲目地在发布的应用程序中完成管理空间活动。 1)因为如果您立即finish(),它会提供糟糕的用户体验。并且 2) 它可能会使 Google 的 GPlay 商店 T&C 无效(不过我懒得检查)。
  • 注意:尽量保留完整的包名。我试过像 .activities.ManageSpaceActivity 这样导致设置在 Lollipop 中崩溃。但是,给出完整的包名称是可行的。 :)
  • 我喜欢把戏:)?你应该恨他们。如果 API 设计良好,则不需要任何技巧。强制这样的框架或库意味着您需要其他东西。 android的问题是没有别的了,所以你不得不做trick。
【解决方案4】:

只是一个技巧。

<application
    android:manageSpaceActivity="{packageName}.ManageSpaceActivity"
>

在这种情况下,Android 操作系统将显示一个管理空间按钮来代替清除数据。

点击后会打开 ManageSpaceActivity。

但是

    <application
        android:manageSpaceActivity=".AnyActivity"
    >

如果你这样做。它将禁用清除数据按钮

技巧是在没有完整包名的情况下编写 Activity 名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2019-12-11
    相关资源
    最近更新 更多