Android學習之------案例

案例一,獲取手機聯繫人,展現在ListView中並存儲到數據庫中

(1)添加獲取手機聯繫人的權限

<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permissio>

(2) 創建一個javabead.用來存信息

package com.example.day011;


public class Phone {
    private String name;
    private String number;

    public Phone() {
    }

    public Phone(String name, String number) {
        this.name = name;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "name='" + name + '\'' +
                ", number='" + number + '\'' +
                '}';
    }
}

(3)獲得手機聯繫

package com.example.day011;

import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private Button buttonId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonId = findViewById(R.id.button_id);

        buttonId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //根據版本動態獲取授權(6.0以上)
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                   requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_CONTACTS},100);
                }else{
                    resolverMethod();
                }
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 100 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
            resolverMethod();
        }
    }

    //因爲重複使用,所有封裝
    private void resolverMethod() {
        ContentResolver contentResolver = getContentResolver();
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String[] strings = {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
        Cursor cursor = contentResolver.query(uri, strings, null, null, null);
        while (cursor.moveToNext()){
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
            //有了對象,其他都好說了.
            Phone phone = new Phone(name, number);
        }
    }
}

案例二,獲取手機短信

1,在清單文件中添加授權

 <uses-permission android:name="android.permission.READ_SMS" />

2,獲得短信內容,展現在ListView中 或者將信息存儲到數據庫中

uri:Telephony.Sms.CONTENT_URI (請求的地址)
字段:Telephony.Sms.ADDRESS 地址 Telephony.Sms.BODY 內容


 private void smsMethod() {
        ContentResolver resolver = getContentResolver();
        Uri uri= Telephony.Sms.CONTENT_URI;
        String[] strs={Telephony.Sms.BODY,Telephony.Sms.ADDRESS};
        Cursor cursor=resolver.query(uri,strs,null,null,null);
        //第一種ListView 中  第二種 :存到數據庫
        ArrayList<Msm> list=new ArrayList<>();
        while(cursor.moveToNext()){
            String address=cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS));
            String body=cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
            Toast.makeText(this, body, Toast.LENGTH_SHORT).show();
            list.add(new Msm(address,body));
            //執行insert語句
        }
    }

java中的添加的代碼

1,添加一個按鈕,在添加一個點擊事件
smsId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                    requestPermissions(new String[]{Manifest.permission.READ_SMS,Manifest.permission.SEND_SMS},101);
                }else{
                    smsMethod();
                }

            }
        });
2,在授權回調的方法中,添加相應的邏輯
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 100 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
            resolverMethod();
        }else if (requestCode == 101 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
            smsMethod();
        }
    }

案例三,獲取手機所有的圖片

1,添加權限.

<!--讀寫sd卡的權限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2,添加一個點擊事件

	picId.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},102);
            }else{
                picMethod();
            }
        }
    });

3,添加java代碼

private void picMethod() {
    //TODO 1:獲得ContentResolver
    ContentResolver contentResolver = getContentResolver();
    //參數一 URI
    //TODO 2:獲得圖庫的URI
    Uri uri1 = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;//圖庫的URI
    Cursor cursor = contentResolver.query(uri1, null, null, null, null);
    while (cursor.moveToNext()){
        //字段
        String title=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.TITLE));
        //圖片的地址
        String data=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        int height=cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT));
        int width=cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media.WIDTH));
        long size=cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.SIZE));
        Log.e("###", "圖片: "+title+":"+data+":"+height+":"+width+":"+size);
    }
}

4,回調函數中,添加邏輯

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 100 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
            resolverMethod();
        }else if (requestCode == 101 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
            smsMethod();
        }else if (requestCode == 102 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
            picMethod();
        }
    }

案例四,獲取手機所有的圖片

1,添加權限.

<!--讀寫sd卡的權限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2,添加一個監聽事件

   musicId.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},103);
            }else{
                musicMethod();
            }
        }
    });

3,添加java代碼

private void musicMethod() {
    //TODO 1:獲得ContentResolver
    ContentResolver contentResolver = getContentResolver();
    //參數一 URI
    //TODO 2:獲得音樂的URI
    Uri uri1 = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;//音樂的URI
    Cursor cursor = contentResolver.query(uri1, null, null, null, null);
    while (cursor.moveToNext()){
        //字段
        String title=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
        //地址
        String data=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
        //歌手
        String artist=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
        //時長
        long duration=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
        long size=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
        Log.i("###", "音樂: "+title+":"+data+":"+artist+":"+duration+":"+size);
    }
}

4,回調函數中,添加邏輯

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == 100 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
        resolverMethod();
    }else if (requestCode == 101 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
        smsMethod();
    }else if (requestCode == 102 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
        picMethod();
    }else if (requestCode == 103 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
        musicMethod();
    }
}

案例五,獲取手機所有的視頻

1,添加權限.

<!--讀寫sd卡的權限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2,添加一個監聽事件

 videoId.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
               requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},104);
           }else{
               videoMethod();
           }
       }
   });

3,添加java代碼

 		private void videoMethod() {
   		//TODO 1:獲得ContentResolver
       ContentResolver contentResolver = getContentResolver();
       //參數一 URI
       //TODO 2:獲得視頻的URI
       Uri uri1 = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;//視頻的URI
//        Uri uri1 = Uri.parse("content://media/external/video/media");
       Cursor cursor = contentResolver.query(uri1, null, null, null, null);
       while (cursor.moveToNext()){
           //字段
           String title=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE));
           String data=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
           String artist=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.ARTIST));
           long duration=cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));
           long size=cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));
           Log.i("###", "視頻: "+title+":"+data+":"+artist+":"+duration+":"+size);
       }
   }

4,回調函數中,添加邏輯

   else if (requestCode == 104 & grantResults[0] == PackageManager.PERMISSION_GRANTED){
       videoMethod();
   }
所有權限及接口明細
  • 獲取圖庫:(讀sd卡的權限)

    • (1)uri:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
    • (2)字段: MediaStore.Images.Media.TITLE; 圖片名稱 MediaStore.Images.Media.SIZE; 大小 MediaStore.Images.Media.DATA; 地址
      MediaStore.Images.Media.HEIGHT; 高 MediaStore.Images.Media.WIDTH; 寬
  • 獲取視頻:(讀sd卡的權限)

    • (1)uri:MediaStore.Video.Media.EXTERNAL_CONTENT_URI
    • (2)字段:TITLE:歌名 ARTIST 歌手 DURATION 總時長 DATA 地址 SIZE 大小
    • String[] strs= new String[]{ MediaStore.Video.Media.TITLE, 歌名 MediaStore.Video.Media.ARTIST, 歌手
      MediaStore.Video.Media.DURATION, 總時長
      MediaStore.Video.Media.DATA, 地址 MediaStore.Audio.Media.SIZE}; 大小

*獲取音頻 : (讀sd卡的權限)
* (1)uri:MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
* (2)字段:TITLE:歌名 ARTIST 歌手 DURATION 總時長 DATA 地址 SIZE 大小
* String[] strs= new String[]{ MediaStore.Audio.Media.TITLE, 歌名 MediaStore.Audio.Media.ARTIST, 歌手
MediaStore.Audio.Media.DURATION, 總時長 MediaStore.Audio.Media.DATA, 地址
MediaStore.Audio.Media.SIZE}; 大小

*獲取聯繫人: (讀聯繫人的權限)
* (1)uri:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
* (2)字段:Phone.DISPLAY_NAME 姓名 NUMBER 電話
* String[] strs= new String[]{ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 姓名
ContactsContract.CommonDataKinds.Phone.NUMBER}; 電話

*獲取短信: (讀短信的權限)
* (1)uri:Telephony.Sms.CONTENT_URI
* (2)字段:ADDRESS 地址 BODY 內容
* String[] strs= new String[]{ Telephony.Sms.ADDRESS, 地址 Telephony.Sms.BODY}; 內容

*通話記錄:
* (1)uri:CallLog.Calls.CONTENT_URI
* (2)字段: NUMBER:電話號碼 DATE:時間 毫秒 DURATION:總時長 秒 TYPE 類型

清單文件中: 聯網的權限:

寫SD卡權限:

讀SD卡權限:

讀取聯繫人的權限:

讀取短信的權限:

讀取通話記錄的權限:

案例六,手機聯繫人的增刪改

步驟和以上相同
1,添加一個權限
2,是添加一個點擊事件
3.java代碼

 private void addPerson() {
        ContentResolver contentResolver = getContentResolver();
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        //ContactsContract.RawContacts.CONTENT_URI
        ContentValues values = new ContentValues();
        //插入一條空數據,返回當前空數據的id.
        long contactid = ContentUris.parseId(contentResolver.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("data1", "xiaoming11");
        contentResolver.insert(uri, values);
        values.clear();

        
        //添加電話
        values.put(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID, contactid);
        //ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE;
        values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/phone_v2");
        //ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE;
        values.put(ContactsContract.Data.DATA1, "12312312311");
        contentResolver.insert(uri, values);
        values.clear();
        
        //添加Email
        values.put("raw_contact_id", contactid);
        //ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE;
        values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/email_v2");
        values.put("data1", "[email protected]");
        contentResolver.insert(uri, values);
    }

4,在回調事件中,添加方法.
擴展資料
兩個博客結合看.
https://www.cnblogs.com/yanganok/p/4584043.html

https://blog.csdn.net/cbk861110/article/details/50930828

案例七,自動填寫註冊手機驗證碼

1,創建一個觀察者

package com.example.day011;

import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.os.Handler;
import android.os.Message;
import android.provider.Telephony;
import android.util.Log;
import android.widget.Toast;

/**
 * 原理,
 * 1,寫一個觀察者,
 * 2,觀察者一直在監視的短信的動態
 * 3,一旦發現有短信的變化(也就是短信的數據庫裏的數據有變化)
 * 4,就執行相應的業務邏輯
 */
public class SmsObserver  extends ContentObserver {
    private static final String TAG = "SmsObserver";
    private ContentResolver contentResolver;
    private Handler handler;
    public SmsObserver(Handler handler ,Context context) {
        super(handler);
        this.handler = handler;
        contentResolver = context.getContentResolver();
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        String[] strs={Telephony.Sms.BODY,Telephony.Sms.ADDRESS};
        Cursor cursor = contentResolver.query(Telephony.Sms.CONTENT_URI, strs, null, null, null);
        if (cursor != null){
            cursor.moveToFirst();
            String string = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
            Log.i(TAG, "onChange: 0000"+string);
            Message obtain = Message.obtain();
            obtain.obj = string;
            handler.sendMessage(obtain);
        }else{
            Log.i(TAG, "onChange: kong");
        }
    }
}

2.Activity中的代碼

package com.example.day011;

import android.content.ContentResolver;
import android.os.Handler;
import android.os.Message;
import android.provider.Telephony;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;

public class SmsActivity extends AppCompatActivity {
    private EditText smsId;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String s = (String)msg.obj;
            Toast.makeText(SmsActivity.this, s, Toast.LENGTH_SHORT).show();
            smsId.setText(s);
        }
    };
    private SmsObserver smsObserver;
    private ContentResolver contentResolver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms);
        smsId = findViewById(R.id.sms_id);

        smsObserver = new SmsObserver(handler,this);
        contentResolver = getContentResolver();
//註冊觀察者
        contentResolver.registerContentObserver(Telephony.Sms.CONTENT_URI,true,smsObserver);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //註銷觀察者
        contentResolver.unregisterContentObserver(smsObserver);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章