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

在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

相关推荐

  • 阿里云服务费用

    阿里云的服务费用根据不同的产品和服务而有所不同。以下是阿里云常见的服务费用: ECS(Elastic Compute Service):根据实例的规格、地域、使用时长等因素计费。 RDS(Relational Database Service):根据数据库类型、规格、地域、使用时长等因素计费。 OSS(Object Storage Service):根据存储…

    2023年9月7日
    20800
  • 阿里云云导播台

    阿里云云导播台是阿里云提供的一种视频制作和直播工具。它具有实时视频切换、特效添加、字幕插入、画面合成等功能,可以帮助用户实现高质量的直播和在线视频制作。 通过阿里云云导播台,用户可以将多路视频流进行实时切换,实现多画面合成;可以添加特效、滤镜等视觉效果,提升视频质量;可以插入字幕、水印等文字信息,丰富视频内容;还可以根据需求定制布局、添加转场效果,提升观看体…

    2023年8月3日
    20000
  • 哈尔滨阿里云代理商:ajax无刷新注册

    为了实现无刷新的注册功能,可以使用Ajax来发送异步请求。具体步骤如下: 在前端页面中,使用HTML表单来收集用户输入的注册信息。同时,添加一个提交按钮或者使用JavaScript来监听表单的提交事件。 在JavaScript代码中,使用Ajax来发送注册请求。可以使用jQuery的ajax方法来简化操作,也可以使用原生的XMLHttpRequest对象。以…

    2023年12月29日
    20300
  • 阿里云服务器远程桌面端口是什么

    阿里云安全组开放哪些端口才能远程ftp 检查下阿里云控制台下的安全组,如果安全组是选择:默认只开放3389,正好你又改了3389的话,这样是连接不上的。解决方法是,新建一个安全组策略,加一条规矩允许你修改的端口通过,把云服务器关联到这个安全组里面(把原来的那个移除),再次连接服务器试试看天津众 维UI设计提供 如何远程连接阿里云主机服务器 第1一步当然是使用…

    2023年8月26日
    20800
  • 榆林阿里云代理商:access的连接查询数据库

    榆林阿里云代理商:使用access连接查询数据库 优势一:强大的云计算平台 阿里云作为国内领先的云计算服务提供商,拥有强大的云计算平台,为用户提供高效、稳定的服务。通过将数据库迁移到阿里云上,您可以轻松实现数据的备份、恢复、扩展和管理。使用Access连接查询数据库,您可以充分利用阿里云的强大计算和存储能力,让您的应用程序运行更加稳定高效。 优势二:灵活可扩…

    2024年1月7日
    17900

发表回复

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

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

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

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