2013-08-28 68 views
4

我正在寫一個需要接收短信的應用程序,每個人都在其代碼中使用「android.provider.Telephony.SMS_RECEIVED_ACTION」意圖操作,但它看起來像API級別17不再支持它! 現在在哪裏?我也沒有在「android.telephony」類中找到SMS_RECEIVED_ACTION! 請別人告訴我,我完全困惑。我應該使用舊的API嗎?android:其中是android.provider.Telephony.SMS_RECEIVED?

+0

什麼讓你覺得它過時? – tyczj

+0

寫入「import android.provider.Telephony;」在你的IDE中,你會看到錯誤。這個類沒有解決。至少在API級別17 –

回答

9

在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> 

從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認可。

+0

以上answe對我有用 - 謝謝! – user1501382

0

android.telephony類提供其在API級1引入詳情請閱讀本android.telephony

android.telephony.SmsManager是用於從收件箱中設備獲取消息的信息有關電話狀態的信息。你可以看一下這裏telephony.SmsManager

沒有任何跡象表明他們在API級別17

+0

感謝您的信息。我說android.provider.telephony被取代,而telephony.SMS_RECEIVED_ACTION消失了!我想知道我在哪裏可以找到它 –

5

我們需要讀取這個文件過時。

Android Developers Blog - Getting Your SMS Apps Ready for KitKat

與Android 4.4開始,你應該停止監聽SMS_RECEIVED_ACTION通過檢查平臺版本,然後用PackageManager.setComponentEnabledSetting禁用您的廣播接收機SMS_RECEIVED_ACTION(廣播,您可以在運行時做)。但是,如果您的應用程序只需要讀取特殊的SMS消息(如執行電話號碼驗證),則可以繼續收聽廣播。請注意,從Android 4.4開始 - 您的應用程序嘗試中止SMS_RECEIVED_ACTION廣播將被忽略,所有感興趣的應用程序都有機會接收它。

我認爲我們必須爲KitKat做好準備。這是一件令人煩惱的事情。 :)

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;

相關問題