安卓:android.provider.Telephony.SMS_RECEIVED在哪里?

6

我正在编写一个需要接收短信的应用程序,大家在代码中都使用“android.provider.Telephony.SMS_RECEIVED_ACTION”意图操作,但是似乎API级别17不再支持它!现在它在哪里?我也没有在“android.telephony”类中找到SMS_RECEIVED_ACTION!请有人告诉我,我完全困惑了。我应该使用旧的API吗?


你为什么认为它已经过时了? - tyczj
4个回答

11

直到API 19(4.4-KitKat),Telephony类没有文档化的API。该类的缺失并不意味着您尝试做的事情不起作用。你需要请求这个权限:

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

如果您在清单文件中注册接收器,代码可能类似于以下内容:

    <receiver android:name=".SmsIntentReceiver">
        <intent-filter android:priority="1">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

来自AOSP中的android.provider.Telephony:

public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";

这里是grepcode.com源代码的参考:

http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/2.3.2_r1/android/provider/Telephony.java/?v=source

请注意类声明之前的"@hide" - 它存在,但未暴露给开发人员。这就是为什么在ADT中无法识别它的原因。


6

我们需要阅读这份文档。

Android开发者博客 - 为KitKat准备SMS应用

从Android 4.4开始,您应该停止监听SMS_RECEIVED_ACTION广播,您可以通过检查平台版本并使用PackageManager.setComponentEnabledSetting()禁用SMS_RECEIVED_ACTION的广播接收器来运行时实现它。但是,如果您的应用程序仅需读取特殊短信消息(例如执行电话号码验证),则可以继续侦听该广播。请注意,在Android 4.4开始,任何尝试中止SMS_RECEIVED_ACTION广播的应用程序都将被忽略,因此所有感兴趣的应用程序都有机会接收它。

我认为我们必须为KitKat做好准备。这是一件麻烦的事情。 :)


3
你可以在你的代码中使用 Telephony.Sms.Intents.SMS_RECEIVED_ACTION
下面是我的可行代码:
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
        Bundle bundle = intent.getExtras();

        if (bundle != null) {
        }
    }
}

你需要导入 import android.provider.Telephony;

0

android.telephony类提供了关于手机状态的信息,该类在api level 1中引入。更多详情请阅读android.telephony

android.telephony.SmsManager用于从设备收件箱中获取消息的信息。您可以在此处查看有关它的信息telephony.SmsManager

没有迹象表明它们在api level 17中已被弃用。


谢谢提供信息。我说android.provider.telephony已经被替换了,而telephony.SMS_RECEIVED_ACTION已经消失了!我想知道在哪里可以找到它。 - Shayan_Aryan

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