Android には、ユーザーに画面に表示する前に SMS テキストの単語を検証するオプションがありますか? このテキスト メッセージを特定のテキストでブロックし、コードで制御できますか?
このことについてのアイデアやチュートリアルはありますか?
BroadcastReceiver を使用して着信 SMS を取得できます
public class SmsReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// Log.i(TAG, "Intent received: " + intent.getAction());
if (intent.getAction().equals(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) {
String str=messages[0].getMessageBody();
if(check for the text in the string str)
{
abortBroadcast();//stops msg from reaching inbox
}
}
}
}
}
}
これらの権限をマニフェストに追加します
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
マニフェストにレシーバーを追加する
<receiver android:name=".SmsReceiver" >
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" >
</action>
</intent-filter>
</receiver>
以下のようにブロードキャストレシーバーを作成します
public class SMSReceiver extends BroadcastReceiver {
private List<NameValuePair> nameValuePairs;
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras == null)
return;
Object[] pdus = (Object[]) extras.get("pdus");
for (int i = 0; i < pdus.length; i++) {
SmsMessage SMessage = SmsMessage
.createFromPdu((byte[]) pdus[i]);
String sender = SMessage.getOriginatingAddress();
String body = SMessage.getMessageBody().toString();
Log.e("message: ", body);
Log.e("Number", sender);
Intent in = new Intent("SmsMessage.intent.MAIN").putExtra(
"get_msg", sender + ":" + body);
context.sendBroadcast(in);
if (body.equals("your text") {
this.abortBroadcast();
}
}
}
}
マニフェストで、受信者を次のように登録します
<receiver
android:name="yourpackagename.SMSReceiver"
android:exported="true" >
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
これでうまくいきます。お役に立てれば。:)