有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android SMS API

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

例如,在收件箱中插入短信息非常简单:

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

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

编辑:安卓系统中的“标准邮件应用程序(消息传递)”正在使用安卓系统监听传入的短信。准许接收短信许可。然后,当新的SMS到达时,将插入带有“特殊”通知id的状态栏通知。 因此,我的问题(如上所述)的一个解决方案是找到并发送正确的广播意图;类似于“新短信已经到达”——意图

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


共 (3) 个答案

  1. # 1 楼答案

    也许你应该换一个

    content://sms
    

    content://sms/inbox
    
  2. # 3 楼答案

    不幸的是,负责这些通知的代码隐藏在messaging application中。类^{}有一个static方法updateAllNotifications,您可以使用^{}和反射调用该方法:

    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);
    

    显然{a4}是一个{a5}有几个原因,但我想不出另一种方法来做你描述的事情