2011-08-10 21 views
-1

ねえ、私は実際にこれについていくつかの洞察を使うことができました。さて、私は日食とアンドロイドの新機能です。ここに私が持っているものがあります。さて、私は、テキストメッセージを監視するために使用しているBroadcastReceiverを持っています。テキストメッセージが入ってくると、それはfromとmessageのボディを取得し、次にそれらをFilterMessage()メソッドに渡します。これは、メッセージ本文を使用してデータベースに対してクエリを実行します。SMSブロードキャスト受信機の問題

は、これまでのところ、それはコンパイルが、私はそれがBroadcastReceiverを(logcatに印刷されません)ここではトリガーされませんテキストを送信する際のコードです:ここ

public class SMSReceiver extends BroadcastReceiver { 
    SQLiteDatabase db; 
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 
    private static String messagefrom; 
    private static String messagebody; 
    final String dbTable = "Realtor_SMS_Table"; 


    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) { 
      Object[] pduArray = (Object[]) intent.getExtras().get("pdus"); 
       SmsMessage[] messages = new SmsMessage[pduArray.length]; 
       for (int i = 0; i < pduArray.length; i++) { 
        messages[i] = SmsMessage.createFromPdu((byte[])pduArray[i]); 
        messagefrom = messages[i].getOriginatingAddress(); 
        messagebody = messages[i].getMessageBody(); 
        Log.d("My SMSReceiver", "From: " + messagefrom); 
        Log.d("My SMSReceiver", "Msg: " + messagebody); 
        FilterMessage(dbTable, messagefrom, messagebody); 

       } 

       Log.d("My SMSReceiver", "SMSReceived"); 

     } 
    } 
    public void FilterMessage(String dbTable, String messagefrom, String messagebody) { 

     DBHelper dbhelper = new DBHelper(null); 
     SQLiteDatabase db = dbhelper.getReadableDatabase(); 
     Cursor cursor = db.query(dbTable, new String[] {"_id", "Description", "URL"}, 
       "_id like " + "'%" + messagebody + "%'", null, null, null, null); 


     Log.d("My SMSReceiver", "sql= " +cursor); 

     if (cursor != null) { 
      cursor.moveToFirst(); 
      String messageAddress = null; 
      String messageDescription = null; 
      String messageURL = null; 
      while (cursor.isAfterLast() == false){ 

       messageAddress = cursor.getString(0); 
       messageDescription = cursor.getString(1); 
       messageURL = cursor.getString(2); 

      } 
      SmsManager sm = SmsManager.getDefault(); 
      sm.sendTextMessage(messagefrom, null, messageAddress + messageDescription, null, null); 
      sm.sendTextMessage(messagefrom, null, messageAddress + messageURL, null, null); 
     } 


    } 


} 

のAndroidManifest.xml

です
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.RealtorSMS" android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="3" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".ActivationActivity" 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 android:name=".SMSReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.telephony.SMS_RECEIVED"></action> 
      </intent-filter> 
     </receiver> 



     <activity android:name=".PreferencesAcitvity" /> 
     <activity android:name=".ViewListingsActivity" /> 


    </application> 
</manifest> 

答えて

1

あなたがマニフェストにあなたのインテントフィルタに資本Tを使用する必要があります。

<action android:name="android.provider.Telephony.SMS_RECEIVED"> 
            ^
0

Uに忘れてはいけませんse

<receiver android:exported="true" > 
関連する問題