是否有一种原生的android方法来从服务获取对当前运行的Activity的引用?
我有一个在后台运行的服务,我想在事件发生时(在服务中)更新我当前的Activity.有没有一种简单的方法(就像我上面建议的那样)?
我的应用使用Google的C2DM(推送通知)来通知用户有关朋友的新活动.安装应用程序后,我将设备注册到C2DM服务器并存储用户的电话号码.所以我知道用户正在使用我的应用程序,我可以向他/她发送推送通知.但是如果用户卸载我的应用程序会发生什么,有没有办法在我的应用程序中捕获它?或者唯一的方法是当我发送C2DM并且无法访问时,在我的服务器上捕获错误,然后将用户标记为非活动状态?
我很乐意在他们的朋友使用应用程序时以及他们不再使用时通知用户.
什么是这种情况的最佳解决方案?
我开发了一款Android应用.现在我想在从手机上卸载应用程序时执行一些操作(即 - 重置设置等..).
是否可以重新设置监听器或在删除应用程序时调用的函数?
由于Android Jelly Bean不支持日志读取权限(根据此谷歌io 2012视频和此视频),我想知道root设备(或非root设备)是否可以绕过这个限制并能够读取日志.
我怎么做?我真的需要将应用程序变成系统应用程序,还是足够生根?
应用程序允许用户回答为什么决定卸载它们可能很有用.
似乎Dolphin网络浏览器应用程序(以及" 我发明的一切 ")以某种方式设法绕过它,现在每次卸载应用程序时它都显示一个网页(在默认的Web浏览器上).
即使我使用ADB卸载,也会发生这种情况.
作为一个用户,我真的很讨厌它,但它仍然很有趣,因为据我所知,应用程序无法获得卸载自己的意图.
怎么会这样?他们是如何克服这个问题的?
这是一个黑客?
据我所知,应用程序无法为自己的卸载获取意图:
但是Dolphin Browser如何设法接收"已删除"事件并启动浏览器,如附图所示?

ADB:
10-20 12:37:00.997: D/BackupManagerService(527): Received broadcast Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:mobi.mgeek.TunnyBrowser flg=0x8000010 (has extras) }
10-20 12:37:00.997: V/BackupManagerService(527): removePackageParticipantsLocked: uid=10112 #1
10-20 12:37:01.007: D/dalvikvm(527): GC_EXPLICIT freed 2247K, 12% free 20128K/22868K, paused 3ms+10ms, total 212ms
10-20 12:37:01.107: D/dalvikvm(527): GC_FOR_ALLOC freed 1508K, 15% free 19649K/22868K, paused 60ms, total 60ms
10-20 12:37:01.137: D/AndroidRuntime(4028): Calling main entry com.android.commands.am.Am
10-20 12:37:01.137: D/dalvikvm(4028): Note: class Landroid/app/ActivityManagerNative; has 163 unimplemented (abstract) methods
10-20 12:37:01.147: I/ActivityManager(527): START u0 {act=android.intent.action.VIEW dat=http://survey.dolphin.com/int/uninstall?id=014f4d1981d6f88bb56630e7a3a7550a&pn=mobi.mgeek.TunnyBrowser&v=248&s=ofw&it=1382250136565&ut=1382250127000&m=Nexus 4&os=android&osv=4.3&cc=US&no=40471&lang=en&jk=uninstalled&ft=212&ht=957&ct=0&nt=1&res=768*1184&ifi=1<s=1&iow=0&iom=0&iospd=0&iogs=0&debug=false&t=1382252820000 flg=0x10000000 …Run Code Online (Sandbox Code Playgroud) 有没有人知道在卸载我的应用程序时是否可以覆盖特定方法?发生这种情况时,最好从服务器端数据库中删除这些用户.
我正在制作一个应用程序,我正在使用Android Room Persistence Library来处理我的数据库层.房间图书馆就像魅力一样,一切都很好.但我希望在用户卸载应用程序时删除会创建的数据库.我尝试卸载应用程序,然后再次安装,但不知何故数据库仍然存在,应用程序能够从中获取旧数据.
我想也许是因为我的应用程序数据备份在设置中设置为自动,并且android在云上备份并再次将其恢复,但关闭备份设置并没有帮助.即使这样做对你来说听起来不是一个好的解决方案.
我创建了一个非常简单的类,RoomDatabase如果有助于回答问题,则扩展和下面是代码.
我知道我可以fallbackToDestructiveMigration()在数据库构建器上使用并增加数据库版本.它将清除数据库中的数据.那不是我想要的.
@Database(entities = {UnleashedEntity.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase INSTANCE;
public abstract DaoContract MyDao();
public static AppDatabase getAppDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database")
.build();
}
return INSTANCE;
}
public static void destroyInstance() {
INSTANCE = null;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我知道我可以使用ACTION_PACKAGE_REMOVED意图让我的应用程序知道卸载.我想知道的是,是否有配置databasebuilder可以完成工作,以及数据库在卸载后如何保留.
嗨我有一个应用程序与内容提供商(联系人等)玩现在当我卸载我的应用程序我想安排内容提供商的原始数据.
有没有办法,如果我的应用程序正在卸载那时我得到事件并完成我的工作.
谢谢
最近我见过一个有趣的应用程序 - Photo Wonder.卸载此应用程序时,它会显示一个Web调查页面,询问应用程序卸载的原因.现在,这是问题所在.据我所知,在删除应用程序后,系统会广播ACTION_PAKAGE_REMOVED意图.但这个有趣的应用程序能够显示我的网页,虽然官方文档说
"正在安装的软件包没有收到此意图."
无论如何,我可以找到一个检查应用程序某种状态的进程.
现在问题就在这里.本机应用程序可以从android系统捕获广播的意图吗?如果有可能,请告诉我如何!:-(
首先,我已经研究了很多关于我的问题,但我找不到合适的解决方案,所以我在这里发布我的查询.希望能够更好地解决这个问题:
在用户从设置或任何其他应用程序(如MyAppSharer)删除我的应用程序之前,我需要向用户请求密码.我找到了一个解决方案,当用户点击卸载按钮时,我可以成功地调用我的活动.我在这里申请了技巧,并致电服务.在服务中,我运行计时器,每1秒运行一次,在那一秒,它检查运行任务的最顶层活动.这按预期完美运行.
现在,我的问题是,此活动适用于每个应用程序用户尝试卸载.我需要我调用的活动应该仅在用户尝试卸载我的应用程序时出现在我的应用程序中.
这是我的代码:
public static final String PACKAGE_INSTALLER = "com.android.packageinstaller";
public static final String PACKAGE_INSTALLER_UNINSTALL_ACTIVITY = "com.android.packageinstaller.UninstallerActivity";
alarmTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);;
ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;
final String packageName = topActivity.getPackageName();
String className = topActivity.getClassName();
Log.v(TAG, "packageName:" + packageName);
Log.v(TAG, "className:" + className);
if (PACKAGE_INSTALLER.equals(packageName)
&& PACKAGE_INSTALLER_UNINSTALL_ACTIVITY.equals(className)) {
//Here I need to apply one condition where package name received to be matched with my package name. But I am not sure how to …Run Code Online (Sandbox Code Playgroud) 我找到了这个服务https://admin.appjolt.com/但我不知道它是如何工作的.当用户决定卸载我们的应用程序时,他们会使用广告/交叉促销打开浏览器意图.确认对话框显示时,意图打开.
谁知道方法?接收器不起作用,它们正在使用某些服务并在侦听是否存在某个对象.我不知道他们在听什么.
android ×13
uninstall ×6
java ×2
service ×2
ads ×1
android-c2dm ×1
android-room ×1
detect ×1
logging ×1
native-code ×1
root ×1