URI解析

本文探讨了Android中URI的使用,例如`MediaStore.Files.getContentUri("external")`和`Uri.parse("content://contacts/presence")`。通过分析`AUTHORITY`与`androidmanifest.xml`的关系,揭示了Android应用程序如何通过URI访问内部数据库,如`call_history`。在`com.mediatek.phone.provider`包下,`CallHistoryDatabaseHelper`用于创建和管理`phone.db`数据库。`CallHistoryContentProvider`利用`CallHistoryDatabaseHelper`进行数据库操作。URI与数据库之间的连接在于`ContentUris.withAppendedId()`方法,它允许添加记录到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Uri uri = MediaStore.Files.getContentUri("external");
        //"content://" + media + "/"+external+/file;
        
 Uri.parse("content://contacts/presence");
 
 public static final String AUTHORITY = "com.android.contacts";
 AUTHORITY与互联网的主机名域名类似,可以这样理解。
 
 Y:\****\alps\packages\providers\ContactsProvider
 通过字串,在androidmanifest.xml中定义
android:authorities="contacts;com.android.contacts"


代码相关统一在Y:\****\alps\packages\providers中做处理
Y:\****\alps\frameworks\base\core\java\android\provider




app内部数据库的格式:
以Y:\****\alps\packages\apps\Phone\src\com\mediatek\phone\provider为例:
UTHORITY = "call_history"
Uri.parse("content://" + AUTHORITY);
content://call_history
URIMATCHER.addURI(CallHistory.AUTHORITY, "calls", CALLS);
我目前的理解,只能理解到这个在哪里放置,那么生成的db库就应该在哪儿 至于db库的存放路径,名称
存放路径一般都在data/data/packagename/databases/name


下来就用com.android.phone下的phone.db来详细解析下URI如何创建访问DB的:


在路径Y:\****\alps\packages\apps\Phone\src\com\mediatek\phone\provider下
的类CallHistoryDatabaseHelper.java可以看到这个类继承SQLiteOpenHelper
DATABASE_NAME = "phone.db",使用父类的构造方法创建实例化
    protected CallHistoryDatabaseHelper(Context context, String databaseName,
                                        boolean optimizationEnabled) {
        super(context, databaseName, null, DATABASE_VERSION);
    }
至此文件名和路径就破解了,至于uri和路径如何衔接?继续看


<provider android:name="com.mediatek.phone.provider.CallHistoryContentProvider"
          android:authorities="call_history" 
          android:exported="true"/>
                  
                  
从这里可以看到这个类的域名是call_history,而CallHistoryContentProvider对数据库的操作,则使用的
是CallHistoryDatabaseHelper这个类去做操作,一些创建,刷新,删除等动作。所以这个案子破了
URI如何解析针对相应的.db文件,并且找到相应的.db文件去








./src/com/android/phone/CallCard.java:1795:            
personUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, info.person_id);
新增一条记录到数据库中




 public static final String AUTHORITY = "call_history";(主机/域名)


数据库内容查看


adb remount
adb shell
cd data/data/com.android.phone/databases
ll
sqlite3 phone.db
.tables为查看数据库列表(android_meta calls)
select * frome calls查看列表内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值