Android 新手,求助如何读取短信内容

2019-08-26 09:41:08 +08:00
 stevenkang

备用手机是 yunos 3.2,Android 5.1,双卡,卡槽 2 插了一张联通的卡,现在不用联通的卡了,但绑定了很多 app 平时需要接受短信。

于是想在备用手机上安装一个能转发短信内容的 app,寻找了一番之后试了几款 app (绿芽短信转发),但是效果都不理想(无法转发或者转发太慢)。

现在想自己开发一个 app,阅读了 Android 官方开发文档后,算是简单的入门,可以写一些简单的功能。在网上找到了读取短信内容的方法:通过读取 “ content://sms/inbox ” 数据内容来查询短信,并且给了“ SMS_READ ”权限,编写代码检查权限也是 OK 的,但是读取短信内容显示 count 为 0.

这是因为是双卡的并且电话卡在卡槽 2 的问题吗?还是因为 yunos 的禁止了读取短信内容权限。

(抱歉没有截图,这会儿代码没在公司电脑上)

16067 次点击
所在节点    Android
23 条回复
janus77
2019-08-26 09:46:11 +08:00
tasker
richard1122
2019-08-26 09:52:41 +08:00
ifttt
stevenkang
2019-08-26 10:29:34 +08:00
@janus77
@richard1122
安装不了梯子,这两个不用梯子可以正常使用吗。也装不了 gms
theoran
2019-08-26 10:34:04 +08:00
有些厂商会默认禁止读取短信,yunos 不清楚,类似 miui 需要自己在开发者选项里开启才行
axlecho
2019-08-26 13:23:55 +08:00
跟手机卡没关系 你要是怀疑手机卡的问题 拔掉手机卡试试

不过记得了很早以前手机卡能存短信那种形式用 Api 应该是获取不到的
arrow8899
2019-08-26 13:47:18 +08:00
Kzhii
2019-08-26 14:25:50 +08:00
Uiautomator 了解一下
siknet
2019-08-26 14:32:45 +08:00
有个 APP 叫备用机,你可以试试
wulu
2019-08-26 14:46:57 +08:00
ifttt
shily
2019-08-26 17:37:37 +08:00
卡槽 2 的原因吧,那个时代双卡的支持不是很好,都是魔改支持双卡的,但 app 层面没有 API 访问卡 2。
iRiven
2019-08-26 17:57:36 +08:00
我也想做这个软件 楼主有联系方式吗
wujl100
2019-08-26 18:20:59 +08:00
正好手边有,给你一段代码参考下:
try{
ContentResolver cr = this.getApplicationContext().getContentResolver();
String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};

Uri uri = Uri.parse("content://sms/inbox");
Cursor cur = cr.query(uri, projection, null, null, "date desc");

if (cur.moveToFirst()) {
String name;
String phoneNumber;
String smsbody;
String date;

int nameColumn = cur.getColumnIndex("person");
int phoneNumberColumn = cur.getColumnIndex("address");
int smsbodyColumn = cur.getColumnIndex("body");
int dateColumn = cur.getColumnIndex("date");

do{
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneNumberColumn);
smsbody = cur.getString(smsbodyColumn);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = new Date(Long.parseLong(cur.getString(dateColumn)));
date = dateFormat.format(d);

}while(cur.moveToNext());
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getSmsInPhone", ex.getMessage());
}
winterbells
2019-08-26 18:33:10 +08:00
我也自己写了个,读取短信太麻烦。用 tasker 将短信发到 app,app 发邮件到邮箱
cz21ok
2019-08-26 18:52:27 +08:00
只接收新短信并转发的话,可以用 BroadcastReceiver, 前几天刚给测试做了个转发验证码到钉钉 bot 的 app,正好有代码可以参考下:
~~~
override fun onReceive(context: Context?, intent: Intent?) {
if(intent?.action.equals("android.provider.Telephony.SMS_RECEIVED")) {
val bundle = intent!!.extras
val pdus = bundle.get("pdus") as Array<Any>
if (pdus.isEmpty()) {
return
}
val messages = arrayOfNulls<SmsMessage>(pdus.size)
val sb = StringBuilder()
for (i in pdus.indices) {
messages[i] = SmsMessage.createFromPdu(pdus[i] as ByteArray)
sb.append(messages[i]?.messageBody)
}
val messageText = sb.toString()
//可以用正则做一些过滤处理
send(messageText)
}
}
~~~
fun send(string: String) 自己实现,可以做个 tg bot 之类的
cz21ok
2019-08-26 18:58:12 +08:00
国内定制 ROM 是有一些坑,测试机某米动态申请权限返回 granted, 但 系统-应用-权限 里发现并没有授权。
demo06
2019-08-27 09:40:07 +08:00
12 楼正解,用 ContentProvider
stevenkang
2019-08-27 13:44:39 +08:00
@wulu
@richard1122
下载安装了 ifttt,发现无法邮件通知成功,不知道是否是系统限制的问题。


@wujl100 这种方式试了很多次,依然读取不到。奇怪的是我下载别的软件(例如:QQ 同步助手)都能读取到历史短信,真不知道他们是用的哪种方式。


@cz21ok 申请权限 OK,代码调用时检测权限 OK、系统-应用-权限设置 OK,内置的安装软件里面都检测了权限没问题,就是读取不到内容。这种定制 rom 太坑爹了,相关的文档都不好找。
wujl100
2019-08-27 15:30:46 +08:00
@stevenkang <uses-permission android:name="android.permission.READ_SMS"/> 读取短信的权限加了么?
PerFectTime
2019-08-28 15:03:49 +08:00
目前用的 Tasker 转发到 Telegram 方案,基本上延时 20s 以内,用着还不错,就是需要自建一个 Telegram API 的反代。

代码如下(别喷我...):
https://gist.github.com/IcedMango/6007aed2d52872a43ef9986475f392df

效果如下:
stevenkang
2019-08-31 12:34:01 +08:00
@wujl100 AndroidManifest.xml 里面加了这个权限的,通过 takePersistableUriPermission 授权也不行

@PerFectTime Tasker 配置好了收到短信、通知触发推送,完全没反应,手动测试推送是没有问题的

国产的 os 太 J8 坑比了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/595057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX