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

在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

Like (0)
luotuoemo的头像luotuoemo
Previous 2024年3月14日 00:24
Next 2024年3月14日 00:25

相关推荐

  • 阿里云mysql数据库服务器价格

    阿里云的MySQL数据库服务器价格是根据不同的配置和使用情况而定的。具体的价格可以在阿里云的官方网站上查询,或者联系阿里云客服咨询获取最新的价格信息。同时还有按量计费和包年包月两种支付方式可供选择。 阿里云MySQL数据库服务器的定价根据不同的配置和使用情况有所不同。以下是阿里云MySQL数据库服务器的价格: 单实例型 MySQL: 基础版:8核16GB配置…

    2023年9月30日
    7900
  • 阿里云国际站注册教程:api用什么编写

    API(Application Programming Interface)通常是由软件开发者或公司所设计用来操作、连接或者交互他们的软件的。API可以用多种编程语言来编写,比如Python, Java, Javascript, C#, PHP等等。 下面是一个使用Python编写API请求的基本示例: import requests url = &#039…

    2024年3月25日
    7300
  • 淄博阿里云代理商:aspx链接数据库

    作为淄博阿里云的代理商,您可以使用以下步骤来链接数据库: 首先,确保您已经购买了阿里云的数据库产品,例如RDS(关系型数据库)或者NoSQL数据库等。 在阿里云控制台登录您的账号,并选择您所购买的数据库产品。 创建一个新的数据库实例,设置相关参数,例如数据库类型、实例规格、存储空间等。 在实例创建完成后,获得数据库实例的连接地址、端口号、用户名和密码等信息。…

    2024年2月16日
    9600
  • 阿里云 视频流送

    阿里云视频流送是指通过阿里云提供的视频服务,将视频内容以流的形式传送给用户。阿里云视频流送服务提供了高可用、高性能的视频传输能力,可以满足用户对视频内容流畅、稳定的观看需求。 阿里云视频流送服务包括以下功能: 视频加速:通过全球多个加速节点,将用户请求的视频内容就近传送给用户,提供更快的视频加载速度和更稳定的观看体验。 视频传输协议转换:支持将视频内容从RT…

    2023年8月26日
    7900
  • 阿里云国际站注册教程:access+网络数据库

    阿里云国际站的注册流程和使用网络数据库的步骤如下: 一、阿里云国际站注册教程 访问官网 打开浏览器,访问阿里云国际站官网:https://www.alibabacloud.com。 注册账户 点击页面右上角的“Free Account”或“Sign Up”按钮。 填写必要的信息,如电子邮箱、密码、国家/地区等,按照提示完成注册。 邮箱验证 注册完成后,阿里云…

    2024年7月11日
    5100

发表回复

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

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

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

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