我正在编写一个需要接收短信的应用程序,每个人都在其代码中使用“android.provider.Telephony.SMS_RECEIVED_ACTION”意图操作,但看起来API级别17不再支持它了! 它现在在哪里?我也没有在“android.telephony”类中找到SMS_RECEIVED_ACTION! 请有人告诉我,我完全糊涂了。我应该使用较旧的API吗?
答案 0 :(得分:11)
Telephony类在API 19(4.4 - KitKat)之前没有文档化的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>
来自android.provider.Telephony AOSP:
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
以下是对源代码的grepcode.com参考:
在类声明之前注意“@hide” - 它就在那里,但没有暴露给开发者。这就是为什么在ADT中没有认识到它。
答案 1 :(得分:0)
android.telephony
类提供有关在api级别1中引入的手机状态的信息。有关详细信息,请阅读此android.telephony
android.telephony.SmsManager
用于从设备收件箱中获取邮件信息。您可以在此处查看telephony.SmsManager
没有迹象表明它们在api级别17中被弃用。
答案 2 :(得分:0)
您可以在代码中使用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;