您好,登錄后才能下訂單哦!
作為安卓四大組件之一,ContentProvider的用處也不少,ContentProvider用于保存和檢索數據,是安卓系統中不同應用程序之間共享數據的接口。
最直觀的應用就是當你發送短信時需要用到聯系人的相關信息,此時通過ContentProvider提供的接口訪問Android系統中的電話簿,并從中選中了聯系人。
Android系統對一系列公共的常用數據類型提供了對應的ContentProvider接口,都定義在android.provider包下。
ContentProvider實現共享數據:ContentProvider提供了一組應用程序之間能訪問的接口,應用程序通過ContentProvider把當前應用中的數據共享給其他應用程序訪問,二其他應用程序也可以通過ContentProvider對指定的應用程序進行訪問。將自己的數據公開給其他應用使用有2種方法,1.定義自己的ContentProvider子類,2.將當前應用的數據添加到已有的ContentProvider中。
下面是一個用ContentProvider訪問手機聯系人的例子。
MainActivity代碼:
public class MainActivity extends Activity {
private String[] columns={Contacts._ID,
Contacts.DISPLAY_NAME,
Phone.NUMBER,
Phone.CONTACT_ID
};
private ListView listview;
private Dialog dialog;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.list1);
dialog=new Dialog(MainActivity.this);
dialog.setTitle("電話");
dialog.setContentView(R.layout.content_dialog);
dialog.setCanceledOnTouchOutside(true);
showinfo();
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
dialog.show();
}
});
}
private void showinfo(){
ArrayList<HashMap<String ,String>> list=new ArrayList<HashMap<String, String>>();
ContentResolver resolver=getContentResolver();
Cursor cursor=resolver.query(Contacts.CONTENT_URI, null,null,null,null);
while(cursor.moveToNext()){
HashMap<String,String> map=new HashMap<String, String>();
String liststr="";
int idindex=cursor.getColumnIndex(columns[0]);
int nameindex=cursor.getColumnIndex(columns[1]);
int id=cursor.getInt(idindex);
String name=cursor.getString(nameindex);
Cursor phone=resolver.query(Phone.CONTENT_URI, null,columns[3]+"="+id,null,null);
while(phone.moveToNext()){
int phonenumberindex=phone.getColumnIndex(columns[2]);
String phonenumber=phone.getString(phonenumberindex);
liststr+=phonenumber;
}
map.put("name", name);
map.put("phonenumber", liststr);
list.add(map);
}
cursor.close();
SimpleAdapter simpleAdapter=new SimpleAdapter(this, list, R.layout.simple_adapter_item, new String[]{"name","phonenumber"}, new int[]{R.id.row_text1,R.id.row_text2});
listview.setAdapter(simpleAdapter);
}
}
這段主要代碼中,Dialog是一個點擊聯系人即可出現的一個懸浮對話框,即紅色部分。
聯系人列表主要是showinfo()方法,即藍色部分,ListView中用的是SimpleAdapter適配。
對應的Xml文件比較簡單,在這里也給出:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/list1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbarAlwaysDrawVerticalTrack="true">
</ListView>
</RelativeLayout>
content_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="--電話號碼--"/>
</LinearLayout>
simple_adapter_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/row_text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="--------"
/>
<TextView
android:id="@+id/row_text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="--------"
/>
</LinearLayout>
同時,需要進行權限設置,在AndroidMainfest.xml里,
<uses-permission android:name="android.permission.READ_CONTACTS"/>
這樣就ok了,可以訪問系統的電話簿了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。