java - 安卓短信API

标签 java android

我知道 SMS 内容提供程序不是公共(public) API 的一部分(至少没有记录),但如果我理解正确,只要您知道如何使用 API,仍然可以使用许多 SMS 功能( ?)。

例如,将 SMS 插入您的收件箱非常简单:

 ContentValues values = new ContentValues();
 values.put("address", "+457014921911"); 
 contentResolver.insert(Uri.parse("content://sms"), values);

不幸的是,这不会触发标准的“您的收件箱中有新短信”通知。是否可以手动触发?

编辑:据我所知,Android 中的“标准邮件应用程序(消息传递)”正在使用 android.permission.RECEIVE_SMS 权限监听传入的 SMS。然后,当新的 SMS 到达时,状态栏通知会插入一个“特殊”通知 ID。 因此,解决我的问题(如上所述)的一种方法是查找并发送正确的广播 Intent ;类似于“新短信已到达”的 Intent 。

编辑:从 Android 市场下载第三方消息应用程序 (chompsms)。这个应用程序更好地满足了我的需求。当我执行上面的代码时,chompsms 会注意到新的短信并显示“标准状态栏通知”。所以我会说标准的 Android 消息应用程序没有正确检测短信?还是我错了?

最佳答案

不幸的是,负责这些通知的代码隐藏在 messaging application 中.类(class)MessagingNotification有一个 static 方法 updateAllNotifications,你可以使用 PathClassLoader 调用它和反射(reflection):

PathClassLoader c = new PathClassLoader("/system/app/Mms.apk", getClassLoader());
Class.forName("com.android.mms.util.ContactInfoCache", true, c)
    .getMethod("init", Context.class).invoke(null, context);
Class.forName("com.android.mms.transaction.MessagingNotification", true, c)
    .getMethod("updateAllNotifications", Context.class).invoke(null, context);

This显然是一个 very bad idea出于多种原因,但我想不出另一种方法来完成您所描述的事情。

关于java - 安卓短信API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1754713/

相关文章:

java - SWTChart 鼠标事件处理

Java Hibernate Bug 参数绑定(bind)错误

android - 打开新帖子作为意向 - Facebook 移动版

android - 使单元格宽度和高度相同以填充表格

Java 四舍五入 double 截断零

java - 在 osgi maven 包中以编程方式更改 log4j 文件名不起作用

java - 在我的 ArrayList 的 ArrayList 中,为什么对单个元素的所有操作都会影响所有其他索引?

android - 从 map fragment 切换到另一个 fragment 并返回

android - 有没有办法对扩展 youtubebaseactivity 的 Activity 实现操作栏

java - 在 webView 中阻止键盘