2013-01-08 9 views
5

Tôi có hai ứng dụng với hai phát sóng sms dữ liệu khác nhau và tôi muốn nhận sms dữ liệu trong cả hai. Cho rằng tôi đã tạo ra phát sóng trong mỗi ứng dụngLàm thế nào để nhận dữ liệu sms ở hai cổng khác nhau

Receiver một trong ứng dụng 1:

<receiver android:name=".SMSReceiver" > 
      <intent-filter android:priority="10" > 
       <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
       <data android:scheme="sms" /> 
       <data android:port="5555" /> 
      </intent-filter> 
    </receiver> 

Receiver hai trong ứng dụng hai:

<receiver android:name=".SMSReceiver1" > 
      <intent-filter android:priority="10" > 
       <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
       <data android:scheme="sms" /> 
       <data android:port="8901" /> 
      </intent-filter> 
    </receiver> 

Bây giờ kịch bản là thế này, sms chỉ nhận được trong đầu tiên cài đặt ứng dụng, tôi đã thử với cùng một cổng, tên lớp và cũng với khác nhau. Nhưng vấn đề không được giải quyết, Làm thế nào tôi có thể giải quyết nó ?? Đây là phát sóng tôi nhận lớp

public class SMSReceiver extends BroadcastReceiver { 



    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle myBundle = intent.getExtras(); 

     SmsMessage[] messages = null; 
     String strMessage = ""; 
     byte[] data = null; 

     if (myBundle != null) { 

      Object[] pdus = (Object[]) myBundle.get("pdus"); 
      messages = new SmsMessage[pdus.length]; 

      for (int i = 0; i < messages.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       phoneNo = messages[i].getOriginatingAddress(); 
       try { 
        data = messages[i].getUserData(); 

       } catch (Exception e) { 

       } 
       if (data != null) { 
        for (int index = 0; index < data.length; ++index) { 
         strMessage += Character.toString((char) data[index]); 
        } 
       } 

      } 

      message = strMessage; 


      System.out.println("message received: " + message); 

    } 
} 

và mã của tôi cho gửi tin nhắn

SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendDataMessage(myNumber, null,(short)8901, sms.getBytes(), null, null); 
+0

Đây là một chủ đề cũ nhưng con có một câu hỏi liên quan đến sms dữ liệu. Bạn có thể cho tôi biết chính xác chúng là gì và chúng có thể bị chặn bởi tường lửa vì các cổng được xem xét không? – user1437328

Trả lời

1

Vài điều cần kiểm tra lại:

a) Bạn có chắc bạn đã thêm android.permission.RECEIVE_SMS phép trong cả hai các ứng dụng?

b) Bạn có thể xóa phần này khỏi cả hai tệp kê khai để đảm bảo rằng tính năng lọc ý định không gây rối?

<data android:scheme="sms" /> 
<data android:port="5555" /> 

c) Nếu b) sẽ hoạt động, bạn có thể quan tâm đến việc lọc trong mã nhận của bạn.

+0

Tôi phải thử b) nhưng hiện tại không có ứng dụng nào đang nhận tin nhắn. – Talha

+0

Tôi nhận ra bằng cách thử cả hai cái một mà chúng ta phải đặt tag để nhận sms – Talha

1

nhận sms từ một cổng khác nhau, thiết lập nhận này trong AndroidManifest.xml của bạn

<receiver android:name=".SMSBcastReceiver"> 
    <intent-filter android:priority="10"> 
    <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
<data android:scheme="sms" /> 
     <data android:port="13013" /> 
</intent-filter> 
</receiver> 

sau đó thiết lập này trong lớp SMSBcastReceiver bạn

public void onReceive(final Context context, Intent intent) { 

Bundle bundle = intent.getExtras(); 

Object messages[] = (Object[]) bundle.get("pdus"); 
SmsMessage smsMessage[] = new SmsMessage[messages.length]; 

for (int n = 0; n < messages.length; n++) 
{ 
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
} 

smsOrigin = smsMessage[0].getDisplayOriginatingAddress(); 
smsData = smsMessage[0].getUserData(); 

for(int index=0; index<smsData.length; ++index) 
{ 
smsBody += Character.toString((char)smsData[index]); 
} 
} 
+0

Tôi hiện đang làm tất cả điều này nhưng vấn đề là tôi muốn chạy hai máy thu phát sóng, tôi cố gắng nó từng người một công việc hoàn hảo, nhưng cả hai đều không chạy cùng một lúc. – Talha