安卓Day10

读取短信

SMSContent类
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.widget.TextView;

public class SMSContent extends ContentObserver {
//上下文
private Context context;
//被填充的textView
private TextView textView;

public SMSContent(Handler handler, Context context, TextView textView) {
    super(handler);
    this.context = context;
    this.textView = textView;
}

//重写onChange方法
@Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    /***
     * 查询短信的数据库并排序
     * _id id
     * address 发信人
     * body 信息内容
     */
    Cursor cursor = context.getContentResolver().query(Uri.parse("content://sms/inbox"),
            new String[]{"_id", "address", "body"},
            null, null, "_id desc");
    if (cursor != null && cursor.getCount() > 0) {
        //获得第一条短信的信息
        cursor.moveToFirst();
        String body = cursor.getString(cursor.getColumnIndex("body"));
        //设置给textView
        textView.setText(body);
    }
}

}

MainActivity类
import android.Manifest;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {

private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //初始化控件
    textView = findViewById(R.id.textView);
    //获取权限
    getAccess(Manifest.permission.READ_SMS);
    //注册监听
    SMSContent smsContent = new SMSContent(new Handler(), this, textView);
    this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smsContent);
}

private void getAccess(String permission) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
        return;
    if (ContextCompat.checkSelfPermission(getApplication(), permission) == PackageManager.PERMISSION_GRANTED)
        return;
    ActivityCompat.requestPermissions(this, new String[]{permission}, 1);
}

}

读取电话联系人

package com.example.myday10lianxi02;

import android.Manifest;
import android.content.ContentResolver;
import android.content.Intent;
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.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
private ListView listView;
private Button button;
private List list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.list_view);
button=findViewById(R.id.btn_get);
button.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_CONTACTS,Manifest.permission.WRITE_CONTACTS},10086);

// }else{
show();

// }

        }

    });
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            User user = list.get(position);
            String num = user.getNum();
            Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+num));
            startActivity(intent);

        }
    });
}


public  void show(){
    ContentResolver contentResolver = getContentResolver();
    Uri uri= ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
    String[] str={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER};
    Cursor query = contentResolver.query(uri, str, null, null, null);
    while(query.moveToNext()){
        String name = query.getString(query.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String num = query.getString(query.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        User user = new User(name, num);
        Toast.makeText(this, ""+user.toString()+name+num, Toast.LENGTH_SHORT).show();
        list.add(user);
    }
    MyAdapter myAdapter = new MyAdapter(MainActivity.this, list);
    listView.setAdapter(myAdapter);
}

}

适配器

package com.example.myday10lianxi02;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

public class MyAdapter extends BaseAdapter {
private Context context;
private List list;

public MyAdapter(Context context, List<User> list) {
    this.context = context;
    this.list = list;
}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHore viewHore;
    if (convertView==null){
        convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
        viewHore=new ViewHore();
        viewHore.name=convertView.findViewById(R.id.small_name);
        viewHore.num=convertView.findViewById(R.id.small_num);
        convertView.setTag(viewHore);
    }else{
        viewHore= (ViewHore) convertView.getTag();
    }
    viewHore.name.setText(list.get(position).getName());
    viewHore.num.setText(list.get(position).getNum());


    return convertView;
}
class ViewHore{
    private TextView name;
    private TextView num;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值