动态获取权限、获取手机短信、联系人、通话记录
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();
}
}
}