1

着信 SMS を正常に監視し、後で表示するためにデータベースに送信しました。モニター送信 SMS について読んだことがありますが、それがどのように機能するのかよくわかりません。ContentObserver を使用して発信 SMS を監視するためのコーディング方法を教えてもらえますか? 着信 SMS の現在のすべてのコードを投稿します。どこから始めるべきかについてのガイドが必要です。

smsReceiver.java

package terima.sms.inbox;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsMessage;
import java.net.*;
import java.io.*;

@SuppressWarnings("deprecation")
public class SmsReceiver extends BroadcastReceiver {

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

        Object messages[] = (Object[]) bundle.get("pdus");
        SmsMessage SMS[] = new SmsMessage[messages.length];
        for (int n = 0; n < messages.length; n++) {
            SMS[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
        }

        String member_id = "1";

        inbox(SMS[0].getOriginatingAddress(), SMS[0].getMessageBody(), member_id);
    }

    public static Boolean inbox(String telefon, String message, String member_id){

        String mesej = "";
        for(int i = 0; i < message.length(); i++)
        {
            if(message.charAt(i) == ' ' || message.charAt(i) == '+')
            {
                if(message.charAt(i) == ' ')
                    mesej += "%20";
                else
                    mesej += "%2B";
            }
            else
            {
                mesej += message.charAt(i);
            }
        }

        try
        {
            URL oracle = new URL("http://192.168.1.111/inbox.php?message=" + mesej + "&telefon=" + telefon + "&member=" + member_id);
            BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));

            String fetch, total = "";
            while ((fetch = in.readLine()) != null)
                total += fetch;
            in.close();

            if(total.equals("1"))
                return true;

            return false;
        }
        catch(Exception e)
        {
            return false;
        }
    }
}

前もって感謝します。

4

1 に答える 1

3

発信 SMS をキャッチするには、ContentResolver と結合した ContentObserver を使用する必要があります。ContentObserver で使用するコードは次のとおりです。

public class SmsObserver extends ContentObserver{   

int smsCount;

public SmsObserver(Context context) {
    super(new Handler());

    smsCount = 0;

}


public void onChange(boolean selfChange){   
    super.onChange(selfChange);
  readSms();
}

private void readSms(){
    Uri uriSMS = Uri.parse("content://sms");
    Cursor cur = context.getContentResolver().query(uriSMS, null, null, null, "_id");

    cur.moveToLast();
    int id = Integer.parseInt(cur.getString(cur.getColumnIndex("_id")));

    if(cur != null && id != smsCount && id>0){
        smsCount = id;

    int type = Integer.parseInt(cur.getString(cur.getColumnIndex("type")));

        if(type == 1){
            // handle the received sms

        }
        else{
            // handle the sent sms
        }
    }

    cur.close();

}
}

その後、SmsOberver のインスタンスを作成し、「content://sms」に登録する必要があります。新しいメッセージを送受信するときよりも頻繁にトリガーされるため、smsCount フィールドがあるのはそのためです。

于 2012-09-07T21:20:37.243 に答える