北京阿里云代理商:android4.0 读取短信

在Android 4.0及更高版本中,应用需要用户的明确同意才能读取他们的短信。在您的应用中,首先需要在应用的清单文件中添加 “READ_SMS”权限:

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

然后,在您的应用需要读取短信的时候,需要动态请求用户权限:

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

在权限被用户授权后,您就可以读取短信数据:

Uri smsUri = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(smsUri, null, null, null, null);

while(cursor.moveToNext()) {
    String address = cursor.getString(cursor.getColumnIndex("address"));
    String body = cursor.getString(cursor.getColumnIndexOrThrow("body"));
    // do something
}

请注意,因为隐私问题,Google在Android Q(10)开始不再允许应用读取短信日志,除非应用设置为默认的短信应用。所以在Android Q及以后的版本,上述代码可能无法正常工作。

Android 4.0读取短信功能需要调用SMS相关API,主要步骤如下:

1)首先,你需要在AndroidManifest.xml文件中添加READ_SMS权限,以便你的应用程序可以读取用户的短信。

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

2)然后,你可以通过以下方式读取短信:

Uri uri = Uri.parse("content://sms/inbox");
Cursor c= getContentResolver().query(uri, null, null ,null,null);
startManagingCursor(c);

// Read the sms data and store it in the list
if(c.moveToFirst()) {
    for(int i=0; i < c.getCount(); i++) {
        SMSData sms = new SMSData();
        sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
        sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
        smsList.add(sms);
        
        c.moveToNext();
    }
}
c.close();

以上代码首先从sms/inbox的Uri中得到一个cursor,然后遍历cursor并将数据存储在SMSData列表中。SMSData是一个简单的类,包括了短信的body和number。

注:“number”表示发送短信者的手机号,“body”表示短信内容。

北京阿里云代理商:android4.0 读取短信

请注意,这只会读取收到的短信,如果你希望读取已发送的短信,你可以改变uri为”content://sms/sent”。

还需要引起注意的是,从Android 4.4(API level 19)开始,只有默认的短信应用才能对SMS数据库有写入权限。其他应用只允许读取短信。同时,在安卓Q 或以上版本,默认短信应用需要添加sms相关权限,比如:

<uses-permission
    android:name="android.permission.WRITE_SMS"
    android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

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

(0)
luotuoemo的头像luotuoemo
上一篇 2024年3月15日 18:51
下一篇 2024年3月15日 18:52

相关推荐

  • 阿里云国际站代理商:安卓json文件存储

    关于安卓(Android)平台使用JSON文件存储的方法,这是一个常见的需求,尤其是在开发涉及到数据持久化的应用时。在Android开发中,可以通过多种方式实现JSON文件的存储和读取。这里提供一个基础的指南: 存储JSON文件 定义JSON数据:首先,需要创建一个JSON对象或JSON数组,这通常是通过使用JSONObject或JSONArray类来实现的…

    2024年7月8日
    13500
  • 连云港阿里云代理商:aop 性能监控

    阿里云(Aliyun)是中国最大的云计算和人工智能技术公司之一,提供了强大的云服务器、云存储、CDN、数据库等服务。而连云港阿里云代理商就是在连云港地区提供阿里云产品和服务的公司。这些公司通常会提供一些本地化的服务,如实地咨询、技术支持等。 AOP,全称Aspect-Oriented Programming,也就是面向切面编程。是一种编程技术,主要用于解决程…

    2024年3月12日
    15200
  • 恩施阿里云代理商:如何设置阿里云服务器的访问权限和身份认证?

    阿里云服务器的访问权限和身份认证可以通过以下步骤进行设置: 创建RAM用户:登录阿里云控制台,在RAM控制台中创建RAM用户,设置用户名和登录密码,并分配相应的访问权限。 创建访问密钥:为RAM用户创建AccessKey ID和AccessKey Secret,用于通过API和SDK访问阿里云资源。 设置访问控制策略:通过RAM控制台或者通过命令行工具设置访…

    2023年11月14日
    15700
  • 德州阿里云代理商:asp.net连接oracle数据库没有安装oracle的客户端

    您可以使用Oracle Data Provider for .NET(ODP.NET)来连接Oracle数据库,无需安装Oracle客户端。 在Visual Studio中打开项目,右键单击“引用”,选择“管理NuGet程序包”。 在搜索框中搜索“Oracle.ManagedDataAccess”并安装。 添加一个新的ADO.NET实体数据模型到您的项目中。…

    2024年2月27日
    15300
  • 阿里云图片服务器图片跨域

    要实现阿里云图片服务器上的图片跨域访问,可以使用以下方法: 在阿里云图片服务器的设置中,允许指定的域名进行跨域访问。可以在阿里云控制台的图片管理中,找到相关设置项,将需要访问图片的域名添加到允许跨域的列表中。 使用阿里云提供的图片处理功能,将图片转换成可访问的URL。阿里云图片服务器提供了丰富的图片处理功能,可以通过URL参数对图片进行处理和转换。将图片UR…

    2023年9月4日
    16200

发表回复

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

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

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

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