Android 做一些常规任务?
我想知道是否有以下可能: 我有一个应用程序(服务)留在后台,每当用户需要时就会被触发Android 做一些常规任务?,android,hook,Android,Hook,我想知道是否有以下可能: 我有一个应用程序(服务)留在后台,每当用户需要时就会被触发 添加/删除/更新联系人 安装/卸载应用程序 在FS上添加/删除/重命名文件 你们认为这可能吗,伙计们?(当然,如果可以通过黑客和肮脏的东西来做到这一点,我会通过适当的方式) 我试图浏览一下互联网,但没有找到与这一点相关的讨论 你猜怎么着?我自己也没试过,但是: 似乎要处理检测联系人数据更改的问题。基本上,您需要注册一个ContentObserver,并处理通知您的更改 签出-从中,您可以注册一个Broadc
- 添加/删除/更新联系人
- 安装/卸载应用程序
- 在FS上添加/删除/重命名文件
你猜怎么着?我自己也没试过,但是: 似乎要处理检测联系人数据更改的问题。基本上,您需要注册一个
ContentObserver
,并处理通知您的更改
签出-从中,您可以注册一个BroadcastReceiver,以收到正在安装或卸载的应用程序的通知。查找添加的ACTION\u PACKAGE\u和删除的ACTION\u PACKAGE\u
有关如何检测文件系统中的文件何时更改,请参阅。我不确定,您可能仅限于使用FileObserver的沙箱。此外-重命名似乎没有明确通知,但您可能会在SDK 5+版的SDK示例中发现,从从
移动到
,或者可能从删除
然后创建
中检测到重命名:
/**
* Retrieves the contact information.
*/
@Override
public ContactInfo loadContact(ContentResolver contentResolver, Uri contactUri) {
ContactInfo contactInfo = new ContactInfo();
long contactId = -1;
// Load the display name for the specified person
Cursor cursor = contentResolver.query(contactUri,
new String[]{Contacts._ID, Contacts.DISPLAY_NAME}, null, null, null);
try {
if (cursor.moveToFirst()) {
contactId = cursor.getLong(0);
contactInfo.setDisplayName(cursor.getString(1));
}
} finally {
cursor.close();
}
// Load the phone number (if any).
cursor = contentResolver.query(Phone.CONTENT_URI,
new String[]{Phone.NUMBER},
Phone.CONTACT_ID + "=" + contactId, null, Phone.IS_SUPER_PRIMARY + " DESC");
try {
if (cursor.moveToFirst()) {
contactInfo.setPhoneNumber(cursor.getString(0));
}
} finally {
cursor.close();
}
return contactInfo;
}
您可以使用
Cursor Cursor=contentResolver.query(contactUri,新字符串[]{Contacts.\u ID,Contacts.DISPLAY\u NAME},null,null)指定要检索的联系人列代码>列名在中描述,查看示例,似乎是cursor.getLong(0)
这是您要查找的联系人ID。它似乎也不稳定,这取决于联系人的编辑方式和其他联系人的添加方式,但您也在捕获这些联系人,因此您应该能够处理这些情况。Wow:直截了当!非常感谢你。没有评论:)没有问题。值得指出的是,您实际上无法以任何方式阻止或影响这些操作,因此它并不是传统意义上的钩子-它只是一个通知。很公平,我不需要更多,一个简单的通知就是完美的:)。再次感谢你;)你知道在监视联系人的情况下,这是否允许获取受影响联系人的标识符?谢谢你!多亏了你,我想我现在已经拥有了我所需要的一切。问候