2013-06-23 109 views
1

我有問題讓我的廣播接收器着火。我的代碼如下:短信接收器沒有觸發

<receiver android:name="com.test.android.receivers.SMS" > 
     <intent-filter android:priority="999" > 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
</receiver> 




public class SMS extends BroadcastReceiver { 
private final String TAG = this.getClass().getSimpleName(); 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    Bundle pudsBundle = intent.getExtras(); 
    Object[] pdus = (Object[]) pudsBundle.get("pdus"); 
    SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]); 
    Logger.sendLog(TAG, messages.getOriginatingAddress()); 
} 

} 

該設備是運行新版CM的HTC One X.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.test.android" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.test.android.UIMain" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.test.android.UISettings" 
     android:label="@string/title_activity_uisettings" > 
    </activity> 

    <service android:name=".services.LocService" > 
    </service> 

    <receiver android:name="com.test.android.receivers.SMS" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

</manifest> 

回答

0

在至少有一次機會截取您的短信息之前,您必須在您的清單中使用READ_SMS權限。

<uses-permission android:name="android.permission.READ_SMS" /> 
+0

和RECEIVE_SMS已添加,沒有區別。 – JamieB

+0

您是否嘗試閱讀有關BroadcastReceiver類的舊參考資料?我發現很多關於與這個班級奮鬥的人的問題。試試這個例子http://stackoverflow.com/questions/4117701/android-sms-broadcast-receiver – Rob013

0

此行添加到您的Android清單文件

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

這條線直接進入了<manifest>標籤下,如下所示:

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

    </application> 
</manifest> 

更新

我發現這在source code的默認的Android應用程序彩信:

<!-- Require sender permissions to prevent SMS spoofing --> 
<receiver android:name=".transaction.PrivilegedSmsReceiver" 
    android:permission="android.permission.BROADCAST_SMS"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

塊上的評論給我說,你需要獲取<uses-permission android:name="android.permission.SEND_SMS" />太多的印象。

試試吧,讓我知道如果工作。

+0

正如另一評論中提到的,這已經是我的應用程序的情況。 – JamieB

+0

在''你有屬性'android:enabled'設置爲false ?.如果是這樣,您的接收器也將被禁用。這意味着系統將無法呼叫您的接收器。 – kdehairy

+0

我已經添加了我的清單以供查看。我沒有啓用設置爲false。 – JamieB

0

在您的接收器標籤內設置了android:exported="true"。這將使您的接收器可用於其他應用程序。查看this瞭解更多信息。

所以你的最終代碼應該是什麼樣子,

<receiver android:name="com.test.android.receivers.SMS" 
      android:exported="true" > 
     <intent-filter 

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

我想這應該解決您的問題。

+0

不幸的是,這並沒有解決問題。感謝您的意見。 – JamieB

+0

對不起,我寫了一個錯誤的代碼。見編輯的。告訴我,如果這不起作用。 – Dulanga

+1

如果你在你的聲明中提供了一個'','android:exported'默認設置爲'true'。所以,這裏沒有明確地說明這是真的。 – kdehairy