2011-12-25 3 views
3

特定の送信者からSMSメッセージを取得しようとするアプリケーションがあり、新しい動作を開始します。 Debug Asを使用してEclipseで実行していて、エミュレータMy BroadcastReceiverを使用するとうまくいくので、期待通りにブレークポイントにヒットします。 EclipseでRun Asを使用してエミュレータを起動すると、SMSメッセージは決して捕まえられません。 BroadcastReceiverは、Log出力の欠如に基づいて決して呼び出されないようです。 SMSは私の電話で走っているときにも捕まえられません。なぜそれは一方通行ではなく、別の方法で動作する任意のアイデアですか?SMSブロードキャストレシーバは、エミュレータでのみデバッグで動作します

私の携帯電話には非常に少数のアプリがありますが、私が知っている唯一のものは、テキストメッセージをキャッチしているのが内蔵のメッセンジャーです。

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

... 

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

受信機:モード「などのファイル名を指定して実行」とは、logcat情報を表示しないとき

public class ConfirmationResponder extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.i("SMS", "############################ Confirmation being read"); 
     // More stuff after this but I don't even get the log message 
    } 
} 
+0

を役に立てば幸い? – Yury

+0

私はエミュレータと私の携帯電話の両方にEclipseのRunコマンドを使用しています。 – Thien

+0

したがって、デバッグモードとは、実際の電話機ではエミュレータとリリースモードを意味しますか?おそらく、実際の電話機では、SMS受信のためにインテントを注文しており、標準受信機はより高い優先度を持っています。優先度を上げてみてください(999に設定してください)。たぶんこれが役立ちます。 – Yury

答えて

0

私はそれがなく、日食うまくいくと思うがデバイスに接続されていません。ここで

2

は私のプログラムです:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 

public class SMSBroadcastReceiver extends BroadcastReceiver { 

     private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
     private static final String TAG = "SMSBroadcastReceiver"; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.i(TAG, "Intent recieved: " + intent.getAction()); 

       if (intent.getAction() == SMS_RECEIVED) { 
        Bundle bundle = intent.getExtras(); 
        if (bundle != null) { 
         Object[] pdus = (Object[])bundle.get("pdus"); 
         final SmsMessage[] messages = new SmsMessage[pdus.length]; 
         for (int i = 0; i < pdus.length; i++) { 
          messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         } 
         if (messages.length > -1) { 
          Log.i(TAG, "Message recieved: " + messages[0].getMessageBody()); 
         } 
        } 
       } 
      } 
    } 

とマニフェストファイル:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="Technicaljar.SMSBroadcastReceiver" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" > 
     <receiver android:name=".SMSBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
      </intent-filter> 
     </receiver> 

    </application> 
    <uses-sdk android:minSdkVersion="7" /> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
</manifest> 

は、それはあなたがリリースとデバッグモードでビルドするにはどうすればよい

関連する問題