2011-05-27 16 views
0

接收數據的短信我公司通過另一個仿真器將數據發送短信到一個模擬器,我的數據發送的短信有,但我BroadcastReceiver不會被調用廣播接收器。 我試圖發送/接收文本短信和的作品精美絕倫,但我需要指定端口所以只有我的應用程序可以監聽短信。調用在Android的

這個問題已經被問兩次,但從來不回答:好心幫我,如果你知道解決

Receiver.java:

public class Receiver extends BroadcastReceiver{ 

// Declaration of Variable for getting the message in it  


/* 
*Called when The Message Received 
*/ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     try{ 


     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String str = ""; 
     byte[] data = null; 

     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 frommm " + msgs[i].getOriginatingAddress();      
       str += " :"; 

       data=msgs[i].getUserData(); 

       for(int index=0; index<data.length; ++index) 
       { 
         str += Character.toString((char)data[index]); 


       } 




      } 
      //---display the new SMS message--- 
      Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
      System.out.println("The message is "+ str); 


     }  
    }catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 

    } 

Menifest文件代碼:(僅適用於相關的代碼)

< receiver android:name =「。Receiver」>

< intent-filter > 

     < action android:name="android.intent.action.DATA_SMS_RECEIVED"/> 

     < data android:scheme="sms"/> 

     < data android:host="localhost"/ > 

     < data android:port="5009"/ > 

     < action android:name="android.intent.action.BOOT_COMPLETED"/> 

      <category android:name="android.intent.category.HOME"/> 

     < /intent-filter > 

    </receiver> 

權限: <使用的許可機器人:名稱= 「android.permission.SEND_SMS」/>

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

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

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

數據消息發送的代碼:

消息包含字符串,我想發送

byte []b=message.getBytes(); 
Short sObj2 = 5009; 

SmsManager sms = SmsManager.getDefault(); 
sms.sendDataMessage(phoneNumber,null,sObj2,b,sentPI, deliveredPI) 

回答

0

看着http://code.google.com/p/android/issues/detail?id=1576它似乎沒有數據SMS在模擬器上工作。您是否在真實設備上嘗試了來自http://code.google.com/p/android/issues/detail?id=1576的評論#23?

+0

thnxx femi的答覆,我已經做到了,但我的廣播接收器不會被調用.. :( – 2011-05-27 11:48:40

+0

有沒有解決我的問題???????請幫助我,如果你可以.. – 2011-06-06 09:07:39

+0

啊如果您編輯的問題,包括你的廣播接收器,在那裏你生成通知和你的AndroidManifest.xml文件的代碼,我們也許能找到什麼不工作。 – Femi 2011-06-06 12:10:00

0

你已經註冊的接收器?您需要註冊您的BroadcastReceiver。創建一個IntentFilter並將其傳遞給registerReceiver。

你有沒有證實,原生的短信應用是接收模擬器的短信?如果是這種情況,那意味着您的SMS實際上正在被接收。我從來沒有在模擬器之間發送短信,只用真實設備做過。我的問題是,註冊接收器之前,我需要設置優先級爲它比任何其他應用程序,可能會作出反應,包括原生的短信應用更高。你可以這樣做:

filterSMSReceived.setPriority(Integer.MAX_VALUE); 

這將使它在任何其他應用程序可以之前得到通知。