day11ContentProvider练习,BroadcastReceiver广播

动态获取权限、获取手机短信、联系人、通话记录
public class MainActivity extends AppCompatActivity {

    Button btn1,btn2,btn3;
    ListView listView1,listView2,listView3;
    ArrayList<Map<String,String>> arrayList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        btn3 = findViewById(R.id.btn3);
        listView1 = findViewById(R.id.list1);
        listView2 = findViewById(R.id.list2);
        listView3 = findViewById(R.id.list3);

        if (Build.VERSION.SDK_INT > 23){
            int i = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS);
            int i1 = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
            if (i == PackageManager.PERMISSION_DENIED || i1 == PackageManager.PERMISSION_DENIED){
                requestPermissions(new String[]{Manifest.permission.READ_CALL_LOG,Manifest.permission.WRITE_CALL_LOG,Manifest.permission.READ_CONTACTS,Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_SMS,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.SEND_SMS},1001);
            }
        }

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                arrayList = new ArrayList<>();
                Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
                ContentResolver contentResolver = getContentResolver();
                Cursor cursor = contentResolver.query(uri, null, null, null, null);
                while (cursor.moveToNext()){
                    Map<String,String> map = new HashMap<>();
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String phoneNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    map.put("name",name);
                    map.put("phoneNum",phoneNum);
                    arrayList.add(map);
                }
                MyBaseAdapter myBaseAdapter = new MyBaseAdapter(MainActivity.this);
                listView1.setAdapter(myBaseAdapter);
                cursor.close();
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onClick(View v) {
                arrayList = new ArrayList<>();
                Uri uri = Telephony.Sms.CONTENT_URI;
                ContentResolver contentResolver = getContentResolver();
                Cursor cursor = contentResolver.query(uri, null, null, null, null);
                while (cursor.moveToNext()){
                    Map<String,String> map = new HashMap<>();
                    String body = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
                    map.put("body",body);
                    arrayList.add(map);
                }
                MyBaseAdapter1 myBaseAdapter1 = new MyBaseAdapter1(MainActivity.this);
                listView2.setAdapter(myBaseAdapter1);
                cursor.close();
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                arrayList = new ArrayList<>();
                Uri uri = CallLog.Calls.CONTENT_URI;
                ContentResolver contentResolver = getContentResolver();
                Cursor cursor = contentResolver.query(uri, null, null, null, null);
                while (cursor.moveToNext()){
                    Map<String,String> map = new HashMap<>();
                    String phoneNum = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
                    String DATE = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
                    String DURATION = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
                    String TYPE = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
                    map.put("phoneNum",phoneNum);
                    map.put("DATE",DATE);
                    map.put("DURATION",DURATION);
                    map.put("TYPE",TYPE);
                    arrayList.add(map);
                }
                MyBaseAdapter2 myBaseAdapter2 = new MyBaseAdapter2(MainActivity.this);
                listView3.setAdapter(myBaseAdapter2);
                cursor.close();
            }
        });
    }
}

BroadcastReceiver广播接收者,四大组件之一

1.广播分类:
(1).无序广播:sendBroadcast()
(2).有序广播:sendOrderBroadcast()
(3).粘性广播:sendStickyBroadcast()
2.广播三要素:
(1).广播发送者
(2).广播接收者
(3).粘性广播:sendStickyBroadcast()
3.应用:
(1).一个app之间多个组件传递数据
(2).多个app之间传递数据
4.注册:(安卓四大组件都需要注册)
(1).静态注册:清单文件
(2).代码中(注册和解除注册)
5.使用:
(1)自定义类继承BroadcastReceiver,重写onReceive方法
(2)注册
(3)广播发送方:sendBroadcast(Intent意图对象)
静态注册和动态注册的区别:
静态注册和动态注册的区别:假如说Activity是接受者:
动态注册:
(1)广播会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
静态注册:
(1)广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局广播

静态:
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()){
            case "com.day12.cp101":
                Toast.makeText(context, intent.getStringExtra("message"), Toast.LENGTH_SHORT).show();
                break;
            case "com.day12.cp102":
                Toast.makeText(context, intent.getStringExtra("message"), Toast.LENGTH_SHORT).show();
                break;
            case "com.day12.cp103":
                Toast.makeText(context, intent.getStringExtra("message"), Toast.LENGTH_SHORT).show();
                break;
        }
    }
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button bt1,bt2,bt3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1 = findViewById(R.id.bt_1);
        bt2 = findViewById(R.id.bt_2);
        bt3 = findViewById(R.id.bt_3);
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_1:
                Intent intent = new Intent();
                intent.putExtra("message","啊~啊啊~~啊~啊啊~~");
                intent.setAction("com.day12.cp101");
                sendBroadcast(intent);
                break;
            case R.id.bt_2:
                Intent intent1 = new Intent();
                intent1.putExtra("message","Hello,Welcome to 。。。。。");
                intent1.setAction("com.day12.cp102");
                sendBroadcast(intent1);
                break;
            case R.id.bt_3:
                Intent intent2 = new Intent();
                intent2.putExtra("message","动次打次~动次打次 咚咚咚 当。。。。。");
                intent2.setAction("com.day12.cp103");
                sendBroadcast(intent2);
                break;
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.day12">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="com.day12.cp101"></action>
                <action android:name="com.day12.cp102"></action>
                <action android:name="com.day12.cp103"></action>
            </intent-filter>
        </receiver>
    </application>

</manifest>
动态
public class MainActivity extends AppCompatActivity {


    Handler handler;
    ArrayList<Map<String,String>> arrayList = new ArrayList<>();
    Button btn1;
    ListView listView;
    MyBroadcastReceiver myBroadcastReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MyThread(MainActivity.this).start();
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what == 100){
                    arrayList = (ArrayList<Map<String, String>>) msg.obj;
                }
            }
        };
        btn1 = findViewById(R.id.btn1);
        listView = findViewById(R.id.list_view);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ContentResolver contentResolver = MainActivity.this.getContentResolver();
                Uri uri = Uri.parse("content://com.day11.homework");
                for (int i = 0; i < arrayList.size(); i++){
                    Map<String, String> map = arrayList.get(i);
                    ContentValues values = new ContentValues();
                    values.put("name",map.get("title"));
                    values.put("pic",map.get("pic"));
                    contentResolver.insert(uri,values);
                }
                //动态注册
                myBroadcastReceiver = new MyBroadcastReceiver(MainActivity.this);
                IntentFilter intentFilter = new IntentFilter();
                intentFilter.addAction("com.day11.homework1");
                registerReceiver(myBroadcastReceiver,intentFilter);

                Intent intent = new Intent();
                intent.setAction("com.day11.homework1");
                sendBroadcast(intent);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myBroadcastReceiver);
    }
}
public class MyBroadcastReceiver extends BroadcastReceiver {

    MainActivity mainActivity;
    ArrayList<Map<String,String>> arrayList1 = new ArrayList<>();

    public MyBroadcastReceiver(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("com.day11.homework1")){
            Toast.makeText(context, "添加完成", Toast.LENGTH_SHORT).show();
            ContentResolver contentResolver = mainActivity.getContentResolver();
            Uri uri = Uri.parse("content://com.day11.homework");
            Cursor cursor = contentResolver.query(uri, null, null, null, null);
            while (cursor.moveToNext()){
                Map<String,String> map = new HashMap<>();
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String pic = cursor.getString(cursor.getColumnIndex("pic"));
                map.put("name",name);
                map.put("pic",pic);
                arrayList1.add(map);
            }
            MyBaseAdapter myBaseAdapter = new MyBaseAdapter(MyBroadcastReceiver.this,mainActivity);
            mainActivity.listView.setAdapter(myBaseAdapter);
        }
    }
}
public class MyBaseAdapter extends BaseAdapter {

    MyBroadcastReceiver myBroadcastReceiver;
    MainActivity mainActivity;

    public MyBaseAdapter(MyBroadcastReceiver myBroadcastReceiver, MainActivity mainActivity) {
        this.myBroadcastReceiver = myBroadcastReceiver;
        this.mainActivity = mainActivity;
    }

    @Override
    public int getCount() {
        return myBroadcastReceiver.arrayList1.size();
    }

    @Override
    public Object getItem(int position) {
        return myBroadcastReceiver.arrayList1.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null){
            viewHolder = new ViewHolder();
            convertView = View.inflate(mainActivity,R.layout.list_view,null);
            viewHolder.imageView = convertView.findViewById(R.id.image_view);
            viewHolder.textView = convertView.findViewById(R.id.tex_view);
            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.textView.setText(myBroadcastReceiver.arrayList1.get(position).get("name"));
        Glide.with(mainActivity).load(myBroadcastReceiver.arrayList1.get(position).get("pic")).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(viewHolder.imageView);
        return convertView;
    }
}
class ViewHolder{
    ImageView imageView;
    TextView textView;
}
public class MyThread extends Thread {

    MainActivity mainActivity;

    public MyThread(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    @Override
    public void run() {
        super.run();
        try {
            URL url = new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=30&page=1");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.connect();
            urlConnection.setRequestMethod("GET");
            InputStream inputStream = urlConnection.getInputStream();
            byte[] bytes = new byte[1024 * 6];
            int len = 0;
            StringBuilder sb = new StringBuilder();
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            while((len = bis.read(bytes)) !=-1){
                sb.append(new String(bytes,0,len));
            }
            JSONObject jsonObject = new JSONObject(sb.toString());
            JSONArray data = jsonObject.getJSONArray("data");
            ArrayList<Map<String,String>> arrayList = new ArrayList<>();
            for (int i = 0; i <data.length(); i++){
                Map<String,String> map = new HashMap<>();
                JSONObject jsonObject1 = data.getJSONObject(i);
                String pic = jsonObject1.getString("pic");
                String title = jsonObject1.getString("title");
                map.put("pic",pic);
                map.put("title",title);
                arrayList.add(map);
            }
            Message obtain = Message.obtain();
            obtain.what = 100;
            obtain.obj = arrayList;
            mainActivity.handler.sendMessage(obtain);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }  catch (JSONException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值