最后
给大家分享一份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
\* 获取 所有联系人
\* @throws Exception
\*/
public void testContacts() throws Exception{
Uri uri \= Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver \= getContext().getContentResolver();
Cursor cursor \= resolver.query(uri, new String\[\]{"\_id"}, null, null, null);
while(cursor.moveToNext()){
int contactId = cursor.getInt(0);
StringBuilder sBuilder \= new StringBuilder("contactId=");
sBuilder.append(contactId);
uri \= Uri.parse("content://com.android.contacts/contacts" + contactId + "/data");
Cursor dataCursor \= resolver.query(uri, new String\[\]{"mimetype", "data1", "data2"},
null, null, null);
while(dataCursor.moveToNext()){
String data \= dataCursor.getString(dataCursor.getColumnIndex("data1"));
String type \= dataCursor.getString(dataCursor.getColumnIndex("data2"));
if("vnd.android.cursor.item/name".equals(type)){ //姓名
sBuilder.append(", name=" + data);
}else if("vnd.android.cursor.item/email\_v2".equals(type)){ //email
sBuilder.append(", email=" + data);
}else if("vnd.android.cursor.item/phone\_v2".equals(type)){ //phone
sBuilder.append(", phone=" + data);
}
}
Log.i(TAG, sBuilder.toString());
}
}
/\*\*
\* 根据号码获取联系人的姓名
\* @throws Exception
\*/
public void testContactNameByPhoneNumber() throws Exception{
String pNumber \= "18012345678";
Uri uri \= Uri.parse("content://com.android.contacts/data/phones/filter/" + pNumber);
ContentResolver resolver \= getContext().getContentResolver();
Cursor cursor \= resolver.query(uri, new String\[\]{"display\_name"}, null, null, null);
//为何使用moveToFirst()?
//因为查找的数据只有一条,那一开始肯定就有一条
if(cursor.moveToFirst()){
String name \= cursor.getString(0);
Log.i(TAG, name);
}
cursor.close();
}
/\*\*
\* 添加联系人
\* @throws Exception
\*/
public void testAddContact() throws Exception{
Uri uri \= Uri.parse("content://com.android.contacts/raw\_contacts");
ContentResolver resolver \= getContext().getContentResolver();
ContentValues values \= new ContentValues();
long contactId = ContentUris.parseId(resolver.insert(uri, values));
//添加姓名
uri = Uri.parse("content://com.android.contacts/data");
values.put("raw\_contact\_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("data2", "张小小");
resolver.insert(uri, values);
//添加电话
values.clear();
values.put("raw\_contact\_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/phone\_v2");
values.put("data2", "2");
values.put("data1", "13671325874");
resolver.insert(uri, values);
//添加Email
values.clear();
values.put("raw\_contact\_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/email\_v2");
values.put("data2", "2");
values.put("data1", "123@qq.com");
resolver.insert(uri, values);
}
/\*\*
\* 在同一事务中完成 联系人各项数据的添加
\* @throws Exception
\*/
public void testAddContact2() throws Exception{
Uri uri \= Uri.parse("content://com.android.contacts/raw\_contacts");
ContentResolver resolver \= getContext().getContentResolver();
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentProviderOperation op1 \= ContentProviderOperation.newInsert(uri)
.withValue("account\_name", null)
.build();
operations.add(op1);
uri \= Uri.parse("content://com.android.contacts/data");
//添加姓名
//0--使用第一操作对象 添加完记录后所返回的ID
ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw\_contact\_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/name")
.withValue("data2", "张三")
.build();
operations.add(op2);
ContentProviderOperation op3 \= ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw\_contact\_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/phone\_v2")
.withValue("data1", "13671325874")
.withValue("data2", "2")
.build();
operations.add(op3);
ContentProviderOperation op4 \= ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw\_contact\_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/email\_v2")
.withValue("data1", "123@qq.com")
.withValue("data2", "2")
.build();
operations.add(op4);
resolver.applyBatch("com.android.contacts", operations);
//applyBatch运行流程
总结
找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。
最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档
喜欢文章的话请关注、点赞、转发 谢谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
存中…(img-pkfjTM5k-1714886237136)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!