重庆阿里云代理商:安卓编程获取短信内容

在Android编程中,获取短信内容可以采用ContentObserver记录系统短信数据库的变化以达到获取新短信内容的目的。以下是一个简单的例子:

首先,需要在AndroidManifest.xml中声明READ_SMS权限:

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

然后,在Activity中创建一个内部类,继扭ContentObserver类,并在onChange方法中处理短信内容获取:

class SMSObserver extends ContentObserver {
    public SMSObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Uri uri = Uri.parse("content://sms/inbox");
        Cursor c = getContentResolver().query(uri, null, null ,null,null);
        if(c != null) {
            if(c.moveToNext()){
                String body = c.getString(c.getColumnIndex("body"));   //获取短信内容
                // 在这里对body进行处理
            }
            c.close();
        }
    }
}

然后在onCreate方法中注册这个观察者:

SMSObserver smsObserver = new SMSObserver(new Handler());
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smsObserver);

以上就是基本的处理过程。需要注意的是从Android 6.0开始,READ_SMS权限被定义为危险权限,可能需要在运行时进行权限请求。

在Android上获取短信内容需要用到SMS系统提供的ContentProvider,获取短信的功能在权限方面也有严格的限制,仅限于默认的短信应用。

以下是一个简单的示例代码,用于获取收件箱中所有短信的内容:

public String getSmsFromPhone() {
    Uri SMS_ALL = Uri.parse("content://sms/");
    StringBuilder smsBuilder = new StringBuilder();

    Cursor cur = getContentResolver().query(SMS_ALL, null, null, null, null);
    // 遍历游标
    while (cur.moveToNext()) {
    // 遍历短信数据库的列,获取短信内容
    for (int i = 0; i < cur.getColumnCount(); i++) {
            smsBuilder.append(cur.getColumnName(i)).append("=").append(cur.getString(i)).append("n");
        }
        smsBuilder.append("================================");
    }

    return smsBuilder.toString();
}

注意:从Android 6.0开始,读取短信的权限被纳入了危险权限,需要进行运行时权限检查。从Android 4.4开始,只有默认的短信应用才能够读取短信。如果你需要读取短信,在AndroidManifest.xml添加以下权限:

重庆阿里云代理商:安卓编程获取短信内容
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

然后在代码中进行运行时权限检查:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, 1);
}

发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/161108.html

(0)
luotuoemo的头像luotuoemo
上一篇 2024年3月14日 00:24
下一篇 2024年3月14日 00:25

相关推荐

  • 湛江阿里云代理商:android 网络视频列表

    很抱歉,我无法直接提供阿里云代理商的信息。不过您可以通过以下途径寻找湛江地区的阿里云代理商: 可以在阿里云官方网站上搜索代理商信息。打开阿里云官方网站,在网站的首页或者页面底部往往会有一个“寻找合作伙伴”或者“查找服务提供商”的链接,点击进入后,选择代理商分类和地区(湛江),即可找到相关信息。 可以通过搜索引擎,如百度、谷歌等搜索“湛江阿里云代理商”,会有一…

    2024年2月5日
    19600
  • 阿里云国际站:android kv 存储

    Android KV 存储(Key-Value Storage) 是一种用于在 Android 应用程序中存储简单键值对数据的机制。它是基于 SharedPreferences API 的一种封装,提供了更简洁的接口和更高效的性能。 阿里云国际站提供了一种名为 KV 存储的服务,用于在云端存储和管理应用程序的键值对数据。通过阿里云 KV 存储,开发者可以将应…

    2024年2月16日
    15200
  • 重庆阿里云代理商:arm7的网络结构组成

    重庆阿里云代理商arm7的网络结构由以下几个组成部分: 网络硬件设备:包括路由器、交换机、防火墙等网络设备,用于构建和管理网络。 网络协议:arm7的网络结构使用TCP/IP协议族,包括TCP、IP、ICMP、ARP等协议,用于实现数据传输和网络通信。 云服务器:arm7作为云服务器的硬件平台,提供计算、存储和网络资源,支持用户在云上部署应用和进行数据处理。…

    2024年2月3日
    14200
  • 连云港阿里云代理商:阿里云 卸载apache

    如果你想通过阿里云控制台卸载Apache服务器,可以按照以下步骤操作: 1.登录阿里云控制台(https://home.console.aliyun.com/)。 2.在左侧菜单中选择“云服务器ECS”,进入ECS管理页面。 3.找到需要卸载Apache的实例,点击实例名称进入详细信息页面。 4.在页面上方的“连接”栏目,选择“远程连接”,进入远程连接管理页…

    2024年3月10日
    21200
  • 阿里云 云存储网关

    阿里云服务器子网掩码和网关怎么设置 云服务器不需要设置的,系统自动给你分配如果你改了网关的话,就连不上服务器了 阿里云上能使用tcpcopy吗? 阿里云的机器只要是同一账户下在一同地区的机房,内网都是默认互通的,若是在同一账户下不同地区的,内网是不允许同信的;若是在不同账户同一地区的,可以提交工单,让阿里的工程师帮你开通,各账户需要同时提交; 阿里云怎么重启…

    2023年8月27日
    17200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
购买阿里云服务器请访问:https://www.4526.cn/