Android 平台很多应用都会读取通讯录,如何彻底禁止这些读取行为?

Android 平台很多应用都会读取通讯录,如何彻底禁止这些读取行为?

不单是通讯录,还有其它隐私性数据,有什么方法或软件能保护好自己的隐私?
 
root是前提,因为Android 自身不提供该功能

接下来就有很多办法:

1,最简单的是用LBE/手机毒霸这样的工具,有的设备是预装LBE(后面会提到)的。但这意味着你需要借助一个第三方商业公司的力量。

2,功能最强大的是PDroid Pathcer,但仅适用于Android 2.3以及AOSP/CM等第三方的Android 4/4.1/4.2。它会给系统的android framework打上补丁,提供这些审查信息的接口。这个工具是开源且非商业的,但使用时可能会遇到困难。

3,lucky patcher以及CM7.x的权限管理,原理等同于在AndroidManifest.xml中删除相应条目。这两个工具均是非商业的,而CM是开源的。

4,肯定还有许多这里没有列出的
--------------------------------

除此以外,还应该学习使用elixir2(可能是个人的免费商业作品)/或者是component manager(非商业,开源)来审查应用程序注册的service/receiver
以控制后台自启动/服务的权限。

原理通过shell执行"pm disable"

--------------------------------
以下是不需要解锁/root,总之不影响保修的情况下能获得的权限:

所有的Android都能全局地禁用(A)GPS,蜂窝网络(以及通过wifi信息)的定位;蜂窝网络,Wifi网络联网。但是应用程序可以获取足够的权限,在wifi开关可以获得和使用者相同的权力。

Android 4开始均提供了原生的联网流量监测工具,并且允许指定特定的应用程序,或全局地不能在使 用蜂窝网络时后台联网(该工具不能阻止前台联网)。Android 4开始,允许“停用”安装在system/分区的不能卸载的应用程序。这个停用类似于通过adb shell执行的"pm disable",但应该是直接使用android framework中的接口

Android 4.1/4.2提供了原生通知权限的管理

------------------------------------

但是,如果要希望android提供这样的场景:

某一个应用程序索取包括联系人名单/定位信息在内的敏感信息,你不允许,但依然让这个应用程序运行,而不干涉到别的应用程序的设置。

维持保修(像魅族小米这样的排除在外,它们的一些设备默认内置了su binary,是可以利用root权限的)的前提下不要指望它,通常你只能在iOS,黑莓设备上遇到这样的场景。

为什么?

我的猜测是
打包安装器和play market在安装应用程序以前,会强制地告诉使用者,该应用程序索取了哪些对象的访问权限,使用者只有接受和放弃两个选择,没有中间道路。而这些就是google希望开发者和使用者接受的规则。google自己是最大的广告公司,如果 为用户提供更为激进的隐私控制可能不符合它的利益(比如android难以推广)

当大部分应用程序都是在play store中下载安装的话,不太好的应用程序会被市场规律/宏观控制给排挤掉,所以你会注意到那些有名的外国应用都能很好遵循“最小权限”的制度,如果应用程序本身没有需要,它们就是不会索取联系人/电话/位置信息/设备序列号。

可是play store在内地基本上没有份额。内地的应用市场又是极端碎片化的,是战国时代。

----------------------------------------

所以需要付出代价:

LBE这种最简单,但是它希望你用上它的起动器,用上它的其它管家类服务,它会希望使用者按照它的商业利益,把它/它的合作伙伴作为手机上的入口。它的所有产品都是为了挣钱服务的。

PDroid Patcher在 使用上可能是最理想的,它仅会按照使用者的需求,阻止应用程序获取相应的敏感对象(而且能控制的对象数目很丰富),甚至可以欺骗诸如陌陌这样的应用,给它发送一个伪造的串号。PDroid不包含商业因素,占用的内存可能也是最小的,然而,部署PDroid很困难,有经验的使用者才能完成这一任务。

    稍微展开一下: 在ICS/JB系统上部署PDroid1/2需要准备JDK(6和7均可),所使用的刷机包,windows用户还需要按照指示设定好cygwin,并至少安装某些组件,如diff;然后进入terminal(cygwin),输入一行命令,补丁会在几分钟后完工。把手机启动到recovery环境,刷入该补丁包,重启进入android,安装Pdroid的管理端app,到此为止PDroid部署完成。

Lucky Patcher一开始是一个用于去除应用的google广告/收费验证的,嗯,从后者来讲,它可能是一个非法的工具。新版的Lucky Patcher可以更改每一项android.permission.*项目的需求。这个方法很粗暴,容易造成崩溃。CM7.x的权限吊销的原理和Lucky Patcher差不多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Android Studio中读取通讯录,您需要使用ContentResolver类和ContactsContract类。您可以使用ContentResolver查询ContactsContract.Contacts表以获取所有联系人的ID,然后使用ContactsContract.CommonDataKinds.Phone表查询每个联系人的电话号码。您还可以使用ContactsContract.CommonDataKinds.Email表查询每个联系人的电子邮件地址。请注意,您需要在AndroidManifest.xml文件中添加READ_CONTACTS权限才能访问通讯录数据。 ### 回答2: Android Studio是一款为Android应用程序开发专门设计的集成开发环境(IDE)。通讯录是存储联系人信息的集合,包括姓名、电话号码、电子邮件等。在开发Android应用程序时,我们通常需要访问设备上的通讯录,并读取其中的联系人信息。下面我们将详细介绍如何在Android Studio中读取通讯录。 第一步是添加必要的权限。在AndroidManifest.xml文件中添加以下代码: ``` <uses-permission android:name="android.permission.READ_CONTACTS" /> ``` 这将授予应用程序读取通讯录的权限。 第二步是编写代码。我们可以使用ContentResolver类来读取通讯录: ``` ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cursor.getCount() > 0) { while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); while (phoneCursor.moveToNext()) { String phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phoneCursor.close(); } } } cursor.close(); ``` 以上代码将查询所有联系人,并将它们的姓名和电话号码显示在控制台上。 完成以上两个步骤后,我们便能够在Android Studio中成功读取通讯录了。需要注意的是,读取通讯录的操作可能很耗时,因此应该避免在UI线程上执行此操作,以免造成不良用户体验。建议使用AsyncTask或Loader等异步工具来执行此操作。 ### 回答3: 在Android Studio中读取通讯录需要使用ContentProvider和Cursor对象来获取数据。ContentProvider是一个Android框架的核心组件,用于管理应用程序中的数据,包括通讯录信息。通讯录数据可以使用ContactsContract类来访问。 首先,我们需要在AndroidManifest.xml文件中添加读取通讯录的权限: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> ``` 接下来,在Activity或Fragment中获取通讯录数据。我们可以用以下代码来获取所有联系人的姓名和手机号码: ```java ContentResolver contentResolver = getContentResolver(); String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; Cursor cursor = contentResolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null ); if (cursor != null) { while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.d(TAG, "Name: " + name + " Phone Number: " + phoneNumber); } cursor.close(); } ``` 上面的代码首先获取了ContentResolver对象,然后使用projection数组获取需要的通讯录信息,使用ContentResolver的query方法获取通讯录数据Cursor对象。最后使用while循环遍历Cursor对象,获取每个联系人的姓名和手机号码。 注意,应该在使用完Cursor对象后及时关闭它,以释放资源。 以上就是在Android Studio中读取通讯录的方法。读取通讯录Android开发中经常用到的一个功能,也是了解ContentProvider和Cursor对象的重要一步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值