2011-01-31 13 views
0

以下は私のJavaコードと私のXMLコードです。誰かが私のonReceieveメソッドが呼び出されない理由を教えてください。onReceiveが呼び出されない

のJava:

public class PopUPSMS extends Activity { 

    String RECEIVE_SMS = "RECEIVE_SMS"; 

    private static final String LOG_TAG = "PopUPSMS"; 

    static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Log.i(LOG_TAG, "onCreate"); 

     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.i(LOG_TAG, "onReceive"); 
      } 
     }, new IntentFilter(RECEIVE_SMS)); 
    } 
} 

XML:あなたは内部クラスとして受信機を使用することはできません

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.smith.johnathan.phone" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".PopUPSMS" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-sdk android:minSdkVersion="3" /> 
</manifest> 
+0

ためApi demos Manifestを見てすることができます。 SMS_RECEIVED "。私はあなたが昨日尋ねた答えを更新し、正しいアプローチを説明しています。 – Zelimir

答えて

2
registerReceiver(new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.i(LOG_TAG, "onReceive"); 
     } 
    }, new IntentFilter(RECEIVE_SMS)); 

あなたは、文字列 "RECEIVE_SMS" を使用して放送受信機を登録しています。 IntentFilterは、アクションの形式である必要があります。あなたの宣言で:

static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 

あなたが持っているでしょう:

registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.i(LOG_TAG, "onReceive"); 
      } 
     }, new IntentFilter(ACTION)); 

をあなたがandroid.provider.Telephony」のための受信機を登録する必要がXML宣言

+0

thnks cchensonそれは今作動する!しかし私はまだ警報ボックスを得ることができません –

+0

あなたの他のポストを見てください。私は答えを加えました。文書によると、それは不可能です。 – ccheneson

0

。別のものを作成します。

+2

申し訳ありませんvladimir私はあなたが正しいとは思わない。私はそれを私の仕事とする多くの例を見つけました。それは何かでなければなりません! –

0

マニフェストにSMSを受信するように指定する必要はありませんか?

<application android:icon="@drawable/icon" android:label="@string/app_name"> 

    <receiver android:name=".MyApp"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

</application> 
関連する問題