我正在编写一个需要接收短信的应用程序,大家在代码中都使用“android.provider.Telephony.SMS_RECEIVED_ACTION”意图操作,但是似乎API级别17不再支持它!现在它在哪里?我也没有在“android.telephony”类中找到SMS_RECEIVED_ACTION!请有人告诉我,我完全困惑了。我应该使用旧的API吗?
我正在编写一个需要接收短信的应用程序,大家在代码中都使用“android.provider.Telephony.SMS_RECEIVED_ACTION”意图操作,但是似乎API级别17不再支持它!现在它在哪里?我也没有在“android.telephony”类中找到SMS_RECEIVED_ACTION!请有人告诉我,我完全困惑了。我应该使用旧的API吗?
直到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源代码的参考:
请注意类声明之前的"@hide" - 它存在,但未暴露给开发人员。这就是为什么在ADT中无法识别它的原因。
我们需要阅读这份文档。
从Android 4.4开始,您应该停止监听SMS_RECEIVED_ACTION广播,您可以通过检查平台版本并使用PackageManager.setComponentEnabledSetting()禁用SMS_RECEIVED_ACTION的广播接收器来运行时实现它。但是,如果您的应用程序仅需读取特殊短信消息(例如执行电话号码验证),则可以继续侦听该广播。请注意,在Android 4.4开始,任何尝试中止SMS_RECEIVED_ACTION广播的应用程序都将被忽略,因此所有感兴趣的应用程序都有机会接收它。
我认为我们必须为KitKat做好准备。这是一件麻烦的事情。 :)
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;
。android.telephony
类提供了关于手机状态的信息,该类在api level 1中引入。更多详情请阅读android.telephony。
android.telephony.SmsManager
用于从设备收件箱中获取消息的信息。您可以在此处查看有关它的信息telephony.SmsManager。
没有迹象表明它们在api level 17中已被弃用。