相关疑难解决方法(0)

应用程序如何检测到它将被卸载?

我们所知道的通常(在实践中任何)防病毒应用程序在卸载之前用于触发简单的对话框,例如:"你要卸载应用程序,你确定吗?" - "是/否".

是的,我知道我可以使用intent-filter拦截包删除意图,例如:

<activity
    android:name=".UninstallIntentActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <action android:name="android.intent.action.DELETE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="package"  />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

但问题很简单,这会拦截任何删除请求,而且这会触发我的应用程序和库存安装程序之间的选择器对话框.因此,如果用户将选择库存安装程序 - 我将无法做任何事情.

我的目标不是阻止用户卸载我的应用程序,而只是回滚我的应用程序所做的更改.

从这些防病毒应用程序中学习我发现这种操作是可行的,所以请帮助我并解释它是如何可能的?

更新

由于有些人不相信它是真的 - 我会参考Avast移动安全:

Anti-Theft通过各种自我保护技术伪装其组件来保护自己免于卸载.

另一个例子:适用于Android的卡巴斯基互联网安全 - 这是卸载它的特殊程序,需要输入密码.

无论如何,这意味着有办法拦截卸载程序,以防止卸载或完成一些最终工作.

android uninstall android-intent

70
推荐指数
3
解决办法
6万
查看次数

是否有可能检测到Android应用卸载?

我的应用使用Google的C2DM(推送通知)来通知用户有关朋友的新活动.安装应用程序后,我将设备注册到C2DM服务器并存储用户的电话号码.所以我知道用户正在使用我的应用程序,我可以向他/她发送推送通知.但是如果用户卸载我的应用程序会发生什么,有没有办法在我的应用程序中捕获它?或者唯一的方法是当我发送C2DM并且无法访问时,在我的服务器上捕获错误,然后将用户标记为非活动状态?

我很乐意在他们的朋友使用应用程序时以及他们不再使用时通知用户.

什么是这种情况的最佳解决方案?

android uninstall detect android-c2dm

58
推荐指数
5
解决办法
7万
查看次数

备份 Room 数据库的最佳方法是什么?

其实我的问题不只是一个问题。如果我卸载应用程序,房间数据库也会被删除。File(getDatabasePath("MyInfoDatabase.db").absolutePath).exists()我在实例化房间数据库之前进行了调试和检查。假设我的应用程序崩溃了,我卸载了它,然后重新安装了该应用程序。所以无法获取旧的房间数据。

Room.databaseBuilder(appContext, AppDatabase.class, "Sample.db")
    .createFromFile(File("mypath"))
    .build()
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,那么我可以将数据库复制并保存到一个目录中,并在使用上述方法重新安装时获取旧数据。这是正确的方法吗?这种方法 getExternalStoragePublicDirectory现在已被弃用。我应该使用MediaStoreapi进行数据库备份吗?另一方面,这里说即使卸载后房间数据仍然存在。卸载应用后房间数据库还存在吗?据我所知它不存在。

android database-backups android-file android-room

5
推荐指数
0
解决办法
554
查看次数