Android 如何禁用管理应用程序的“应用程序信息”中的“清除数据”按钮

Android 如何禁用管理应用程序的“应用程序信息”中的“清除数据”按钮,android,sqlite,Android,Sqlite,我正在安卓2.2上工作,在安卓清单的应用程序选项卡中提供“允许清除数据”选项来设置true或false。但设置为False后,我的应用程序无法禁用管理应用程序的“应用程序信息”中的“清除数据”按钮。当应用程序在Data/Data/packge name/databases/中包含数据库时,我面临这个问题 我必须保护我的应用程序数据库不被用户访问。无法阻止用户清除你的应用程序数据。您提到的清单选项仅适用于系统应用程序,作为开发人员,您无法安装系统应用程序 有关详细信息,请参阅-尤其是Diane H

我正在安卓2.2上工作,在安卓清单的应用程序选项卡中提供“允许清除数据”选项来设置true或false。但设置为False后,我的应用程序无法禁用管理应用程序的“应用程序信息”中的“清除数据”按钮。当应用程序在Data/Data/packge name/databases/中包含数据库时,我面临这个问题


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

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


有关详细信息,请参阅-尤其是Diane Hackborn(Android框架工程师)的回复将
Android:ManageSpace活动=“.ActivityOfMyChoice”
添加到清单的
应用程序标记中,如:

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

然后,除了
“清除数据”
,还有一个用于
“管理空间”
的按钮,用于启动MyChoice的
活动

据我所知,这在100%的情况下都有效。

AndroidManifest.xml

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


  <activity
    android:name="[packageName].ManageSpaceActivity"
    android:screenOrientation="portrait" />
而且这个活动在创作时就已经死了,我喜欢技巧:)

现在,您可以按任意多的键来管理空间了!:) -如果需要,您可以在
ManageSpaceActivity
上执行自定义数据/缓存删除操作,但您可以保留您的数据,您希望保留哪种数据

对Jakar的回答也请投票

只是个把戏

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

在这个场景中,Android操作系统将显示一个管理空间按钮来代替清除数据

单击它将打开ManageSpace活动

但是

    <application
        android:manageSpaceActivity=".AnyActivity"
    >

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


诀窍是在不使用完整程序包名称的情况下写入活动名称

谢谢您的回答,那么是否有任何方法可以阻止用户访问数据库?如果数据库存储在设备上,则不会。卸载应用程序时,它将被删除,用户始终可以通过“清除数据”选项进行删除。如果数据是只读的,请将其放置在应用程序资源中,并在执行应用程序时根据需要进行恢复。如果数据需要更改或更新,我认为您需要将其远程存储,然后您必须处理通过互联网访问的问题。如果您观察到Android Market的清除数据也会将其重置为初始阶段。所以如果有办法的话,他们应该在市场上实施。-1:那是错误的。见下面的答案。您还可以在清单中使用:android:allowClearUserData=“false”属性。@Borg8您不能直接使用该命令,这些选项仅适用于Mediaprovider等系统应用程序,为了使用该选项,您必须使自己的硬件由安卓操作系统供电。请参阅下面的讨论,其中告诉您不要干扰该选项。Jakar的解决方案:很好:-)。从事。。。emulator和Acer Liquid Mini,Android 2.1。请注意,您将该属性放在
AndroidManifest.xml
的标记
中。它甚至会打开子活动,只是系统会以正常方式调用它,所以不要在调用
startActivity()
时将数据传输到它。注意:请尝试保留完整的包名。我尝试了like.activities.ManageSpaceActivity,这导致棒棒糖中的设置崩溃。但是,给出完整的软件包名称是可行的。:)@Saty我不记得我试过哪些,但是如果你遇到任何问题,你可以随时检查并告诉我:)在Android 5+和Android 6上工作,谢谢。另外,不要盲目地在发布的应用程序中完成管理空间活动。1) 因为如果您只是立即
finish()
,它会提供糟糕的用户体验。2)它可能会使谷歌针对GPlay商店的T&C无效(不过我懒得去查)。注意:试着保留完整的软件包名称。我尝试了like.activities.ManageSpaceActivity,这导致棒棒糖中的设置崩溃。但是,给出完整的软件包名称是可行的。:)我喜欢恶作剧:)?你应该恨他们。如果API设计得很好,就不需要任何技巧。强制这样的框架或库意味着您需要其他东西。安卓的问题是没有别的东西,所以你不得不做一些小动作。公认的答案是错误的!!你能换一下吗。android:ManageSpace活动=“.ActivityOfMyChoice”启动要打开的活动。见下面的答案
    <application
        android:manageSpaceActivity=".AnyActivity"
    >