2011-10-25 24 views
5

Những gì tôi đã làmSMS Broadcast Receiver không có được textmessage


Xin chào Guys, tôi là tạo ra tại thời điểm một tin nhắn SMS Broadcast Receiver, tôi chỉ cần cất lên với hướng dẫn này: Broadcasttutorial. Sau khi tôi đã làm mã, tôi cập nhật Manifest của tôi. Sau đó tôi gửi sms từ điện thoại khác của tôi đến điện thoại của tôi, nhưng nó không hoạt động. Tôi đã không nhận được bất kỳ đầu ra.

Câu hỏi


gì tôi cần phải thay đổi, mà tôi có thể nhận được những tin nhắn SMS. Xin vui lòng gimme một anwser chi tiết mà tôi có thể tìm hiểu nó, một hướng dẫn tốt cũng sẽ là tuyệt vời!


SMSBroadcastReceiver (là trong .services gói)

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(); 
     }       
    } 
} 

Đây là AndroidManifest.xml của tôi:

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

Trả lời

6

Đặt <uses-permission android:name="android.permission.RECEIVE_SMS" /> ngoài <application> tag:

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

CẬP NHẬT

Hóa ra rằng @safari sử dụng "Handcent SMS" ứng dụng trên điện thoại của mình mà chặn tin nhắn SMS (điều này có thể vì SMS_RECEIVED là một chương trình phát sóng có thứ tự và có thể bị hủy bởi các bộ thu phát sóng có mức độ ưu tiên cao, hãy tham khảo to this thread để biết chi tiết).
Để bỏ qua vấn đề này, người dùng cần phải cài đặt bộ thu phát sóng có mức độ ưu tiên cao hơn "SMS thủ công". @safari đã sử dụng mức độ ưu tiên cao nhất được phép cho các ứng dụng trong Android: và nó hoạt động cho anh ta.
Để xác định ưu tiên của máy thu phát sóng thêm android:priority thuộc tính tương ứng <intent-filter> mục:

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

tôi đã làm điều đó, nhưng nó đã không làm việc tôi vẫn không nhận được các toastmessage với tin nhắn trong nó, whats wrong :(? – safari

+0

@safari bạn đã kiểm tra đầu ra LogCat? Bất kỳ lỗi nào? – Idolon

+0

không có trong logcat của tôi chỉ thấy không có gì về người nhận của tôi ... – safari

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

thay vì msgs.length, pdus chứa các tin nhắn sms thực.

+0

tôi đã thử điều đó nhưng không thành công. – safari

+0

Đó là cách tôi triển khai Máy thu SMS của tôi, nếu bạn muốn tôi có thể đăng bài thực hiện của tôi vào ngày mai. – Carnal

0

gauglerb chỉ cho tôi đi đúng hướng ở đây với bình luận của mình cho câu trả lời chấp nhận và tôi nghĩ rằng tôi nên chia sẻ phát hiện của tôi.

Handcent thực sự là một cậu bé xấu và không cho phép bất kỳ ứng dụng nào khác nhận được tin nhắn khi nó được cài đặt.

May mắn là có một giải pháp dễ dàng nếu bạn không muốn gỡ cài đặt Handcent:
Trong cài đặt Ứng dụng của Handcent, bạn có thể chọn Handcent làm ứng dụng Nhắn tin mặc định. Nếu điều này bị vô hiệu hóa, tin nhắn có thể đi qua các thiết bị thu khác.

Các vấn đề liên quan