2011-10-25 81 views
5

我所做的短信廣播接收機沒有得到的TextMessage


你好,大家好,我創建的那一刻短信廣播接收器,我只是一個建造了這個教程: Broadcasttutorial。在我完成代碼之後,我更新了我的Manifest。之後,我從其他手機發送短信到我的手機,但沒有奏效。我沒有得到任何輸出。

問題


什麼我需要改變,我能接收這些短信。請給我一個詳細的anwser,我可以學習它,一個很好的教程也將是偉大的!

代碼


SMSBroadcastReceiver(是包。服務)

package de.retowaelchli.filterit.services; 

import de.retowaelchli.filterit.R; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 
import android.widget.Toast; 


public class SmileySmsReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Log.d("SmileySmsReceiver", "Yes it calls the onReceive"); 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String str = "";    
     if (bundle != null) 
     { 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];    
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
       str += "SMS from " + msgs[i].getOriginatingAddress();      
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n";   
      } 
      //---display the new SMS message--- 
      Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
     }       
    } 
} 

這是我的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="de.retowaelchli.filterit" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="10" /> 

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

    <application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:debuggable="true" 
       android:screenOrientation="sensor" 
       android:theme="@style/FilterIt.Theme"> 

     <activity android:name=".SplashScreenActivity" 
        android:label="@string/app_name"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    <!-- Receiver --> 
     <receiver android:name="de.retowaelchli.filterit.services.SmileySmsReceiver" android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver>  



     <!-- Startseite --> 
     <activity android:name=".StartseiteActivity"></activity> 

     <!-- Von Startseite ausgehende Activitys --> 
     <activity android:name=".SmileyActivity"></activity> 
     <activity android:name=".ADeleteActivity"></activity> 
     <activity android:name=".StatsActivity"></activity> 
     <activity android:name=".HelpMenuActivity"></activity> 


     <!-- Von Stats ausgehende Activitys --> 
     <activity android:name=".stats.ADFilterStats"></activity> 
     <activity android:name=".stats.SFilterStats"></activity> 
     <activity android:name=".stats.CreatedADFilters"></activity> 
     <activity android:name=".stats.CreatedSFilters"></activity> 

     <!-- Von ADeleteActivity ausgehende Activitys --> 
     <activity android:name=".ADFilterConfigActivity"></activity> 

     <!-- Von SmileyActivity ausgehende Activitys --> 
     <activity android:name=".SFilterConfigActivity"></activity> 

    </application> 
</manifest> 

回答

6

<application>標籤的<uses-permission android:name="android.permission.RECEIVE_SMS" />外:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="de.retowaelchli.filterit" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="10" /> 

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

    <application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:debuggable="true" 
       android:screenOrientation="sensor" 
       android:theme="@style/FilterIt.Theme"> 

    <!-- Receiver --> 
     <receiver android:name="de.retowaelchli.filterit.services.SmileySMSBroadcastReceiver"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
     … 
     … 
    </application> 
</manifest> 

UPDATE

原來,@safari使用 「Handcent短信」 他的手機上的應用程序,攔截傳入的短信(這是可能的,因爲SMS_RECEIVED是有序廣播,可以被高優先級廣播接收機取消,詳情請參閱to this thread)。
要繞過此問題,需要安裝具有比「Handcent SMS」更高優先級的廣播接收器。 @safari使用了Android中應用程序允許的最高優先級:,它對他有效。
要指定廣播接收機的優先級增加android:priority屬性對應的<intent-filter>項目:

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

我做到了,但它沒有工作我仍然沒有得到與它的消息toastmessage,最新錯誤:(? – safari

+0

@safari你檢查LogCat輸出?有任何錯誤嗎? – Idolon

+0

沒有在我的logcat我只是沒有看到我的接收器... – safari

0
for (int i=0; i<pdus.length; i++) 

代替msgs.length,pdus包含真正的短信息。

+0

我試過,但沒有工作抱歉。 – safari

+0

這就是我實現我的短信接收器,如果你想我可以發佈我的明天實施。 – Carnal

0

gauglerb我指出了正確的方向在這裏與他的接受的答案評論,我想我應該分享我的發現。

Handcent確實是一個壞男孩,並且不會讓任何其他應用程序在安裝時收到消息。

幸運的是,如果您不想卸載Handcent,則有一個簡單的解決方案:
在Handcent的應用程序設置中,有一個選項可以使Handcent成爲默認的Messaging應用程序。如果禁用,則可以將消息傳遞給其他接收者。