Android短信API

8
我知道SMS内容提供程序不是公共API的一部分(至少没有记录),但如果我理解正确,只要您知道如何使用API,仍然可以使用许多SMS功能。例如,将SMS插入收件箱非常简单:
 ContentValues values = new ContentValues();
 values.put("address", "+457014921911"); 
 contentResolver.insert(Uri.parse("content://sms"), values);

不幸的是,这不会触发标准的“收到新短信”的通知。有没有可能手动触发?

编辑:据我所知,Android中的“标准邮件应用程序(Messaging)”使用android.permission.RECEIVE_SMS权限来监听传入的SMS。然后,当有新的SMS到达时,将插入一个带有“特殊”通知ID的状态栏通知。 因此,解决我上述问题的一种方法可能是找到并发送正确的广播意图;类似于“NEW SMS HAS ARRIVED”意图。

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

3个回答

7

不幸的是,负责这些通知的代码隐藏在短信应用中。类MessagingNotification有一个static方法updateAllNotifications,您可以使用PathClassLoader和反射调用该方法:

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

这个链接 显然是一个非常糟糕的想法,有多种原因,但我无法想到其他实现你所描述的方法。


1

0

也许你应该替换一下

content://sms

使用

content://sms/inbox

2
没有任何区别,短信出现在收件箱中。但仍然没有漂亮的短信通知 :) - Schildmeijer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接