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

在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

相关推荐

  • 阿里云国际站代理商:apache发布jsp网站

    阿里云国际站代理商:Apache发布JSP网站 引言 阿里云作为全球领先的云计算和人工智能科技公司,提供全球范围内的云服务。作为阿里云国际站代理商,我们深知阿里云在技术和服务方面的优势。本文将介绍如何使用阿里云的服务来发布JSP网站,并展示Apache作为JSP容器的优点。 阿里云的优势 1. 强大的基础设施:阿里云拥有覆盖全球的数据中心和高速网络,可以提供…

    2024年1月25日
    22200
  • 云计算平台运维与开发职业技能等级证书有用吗

    现在的计算机等级证对就业有帮助吗? 帮助不大,现在的用人单位看重的是你的工作经验和技术技能,拥有证书不代表你就能胜任该领域的工作! 计算机等级证书有用吗? 有用。一级证书表明持有人具有计算机的基础知识和初步应用能力,掌握文字、电子表格和演示文稿等办公自动化软件(MS Office、WPS Office)的使用及因特网(Internet)应用的基本技能,具备从…

    2023年8月26日
    21200
  • 阿里云国际站:access怎样添加新数据库新内容

    在阿里云国际站上,添加新数据库或者在现有数据库中添加新内容通常涉及以下步骤: 登录阿里云控制台:首先,你需要登录到阿里云控制台。如果你还没有阿里云账户,你需要先注册一个。 选择数据库服务:在阿里云控制台中,选择你需要使用的数据库服务,例如RDS(关系数据库服务)、PolarDB、MongoDB等。 创建或选择数据库实例: 如果你需要添加新的数据库,你可以创建…

    2024年7月5日
    19100
  • 东营阿里云代理商:ajax从服务器获取图片上传

    如果您想通过ajax从服务器上获取图片上传,您可以使用以下步骤实现: 在您的网页上创建一个文件上传的表单,让用户可以选择要上传的图片文件。 使用ajax发送一个POST请求到服务器,将用户选择的图片文件上传。 在服务器端接收到文件后,进行相应的处理(例如保存文件到服务器指定的目录)。 根据上传的结果,向客户端返回相应的结果(例如上传成功或失败的提示信息)。 …

    2024年2月21日
    20100
  • 烟台阿里云代理商:阿里云服务器怎么ping

    首先登录到阿里云控制台,并选择需要进行ping的服务器实例。 在实例详情页面中,找到公网 IP 地址,并记录下来。 打开命令提示符或终端窗口,输入 ping 命令加上公网 IP 地址,例如: ping 47.75.85.151 按 Enter 键执行 ping 命令,等待结果返回。 如果结果显示类似以下信息,表示ping通了: Reply from 47.7…

    2024年3月12日
    22600

发表回复

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

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

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

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