Android四大組件——ContentResolver

ContentResolver

完整代碼請見:longlong’s github

內容URI的標準格式:

  content://com.example.app.provider.table1
  content://com.example.app.provider.table2
  內容URI主要由兩部分組成:權限(authority)和路徑(path),權限一般採用程序包名的方式進行命名,路徑:區分不同的表,一般放到權限的後面。content:協議聲明。—>清楚地表明我們想要訪問哪張表裏的數據。
  在得到內容URI的字符串之後,解析成Uri對象纔可以作爲參數傳入。(調用Uri.parsse()方法)。

Uri uri = Uri.parse("content://com.example.app.provider/table1")

查詢表中的數據

Cursor cursir = getContentResolver().query(
    uri,
        projection,
        selection,
        selectionArgs,
        sortOrder);

參數




  查詢完之後,將數據從Cursor對象中逐個取出來:通過移動遊標的位置來遍歷Cursor的所有行,再取出每一行的數據

if(cursor != null){
            while(cursor.moveToNext()){
                String column1 = cursor.getString(cursor.getColumnIndex("column1"));
                String column2 = cursor.getString(cursor.getColumnIndex("volumn2"));
            }
            cursor.close();
        }

添加數據

 ContextValues values = new ContextValues():
        values.put("column1","text");
        values.put("column2","1");
        getContentResolver(),insert(uri,values);

更新新添加的數據

ContextValues values = new ContextValues():
        values.put("column1", "");
        getContentResolver().update(uri, values, "column1 = ? column2 = ?", new String[]{"text", "1"});

  使用了selection和selectioArgs參數來對想要更新的數據進行約束,來防止所有的行都會受到影響。

刪除

getContentResolver().delete(uri,"column2 = ?",new String[]{"1"});

讀取系統聯繫人並實現撥打功能

  佈局LinearLayout裏面只放一個ListView。
  MainActivity中:

public class MainActivity extends AppCompatActivity {
    ListView contactsview; //聲明一個ListView對象
    List<String> contactslist = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactsview = (ListView) findViewById(R.id.contacts_view);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactslist);
        contactsview.setAdapter(adapter);
        readContacts();

        contactsview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //取得要撥的電話號碼
                String phoneNum =contactslist.get(position);
                System.out.println(phoneNum);
                //使用Intent來切換到打電話的界面上,並將要播的電話傳進去,
                Intent in = new Intent();
                //設置現在要切換的功能
                in.setAction(Intent.ACTION_CALL);
                in.setData(Uri.parse("tel:" + phoneNum));
                startActivity(in);
            }
        });
    }
    private void readContacts() {
        Cursor cursor = null;

        cursor  = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        while (cursor.moveToNext()) {      //向下移動光標,循環:將所有列表顯示出來。對cursor對象進行遍歷
            String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            contactslist.add(displayName + "\n" + number);
        }
        cursor.close();
        //將Cursor對象關掉。
    }
}

  AndroidManifest.xml文件中設置權限:

    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章