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

时间:2013-08-28 17:25:42

标签: android

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

3 个答案:

答案 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参考:

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中没有认识到它。

答案 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;