0

SMS メッセージを送受信する機能を持つアプリを作成しています。アプリから送信された SMS メッセージは、アプリがインストールされている別の電話でのみ受信され、電話のネイティブ SMS アプリには届かないようにしたいと考えています。これまでに見つけた唯一の解決策は、マニフェスト ファイルで android:priority に高い優先度を設定することです。

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

そして、BroadcastReceiver を拡張するクラスの onReceive メソッドに this.abortBroadcast() ステートメントを配置します。

public class SMSreceiver extends BroadcastReceiver
{
    private final String CODE = "myappcodeword";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;
        String from = "";
        String str = "";
        String sms = "";

        if (bundle != null)
        {
            Object [] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];
            for (int i = 0; i<msgs.length; i++)
            {
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                if (i == 0)
                {
                    from = msgs[i].getOriginatingAddress();
                }
                str += msgs[i].getMessageBody().toString();
            }

            if (str.startsWith(CODE)) // SMS starts with code word therefore was sent by my app
            {
                sms = str.substring(CODE.length()); // extract code word from actual sms message
                Intent SMSIntent = new Intent(context, SMSActivity.class);
                SMSIntent.putExtra("from", from);
                SMSIntent.putExtra("sms", sms);
                SMSIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(SMSIntent); // start new activity using sms info
                this.abortBroadcast();
            }
        }
    }
 }

もちろん、自分のアプリ向けではない SMS をブロックしたくないので、何らかのキーワードでアプリから送信される SMS メッセージを開始することを考えました。私の質問は、これよりも良い解決策はありますか? (たとえば、理論的には、キーワードがどれほどランダムで、アプリがそれを除外しても、ユーザーは意図的にキーワードを含む誰かに SMS を実際に送信する可能性があります)。また、SMSの送信先の電話にアプリがインストールされていない場合、上記のコードはアプリから送信されたSMSを除外しません。SMS の送信先の電話にアプリがインストールされているかどうかを最初に確認する方法はありますか? アプリがインストールされていない場合は、その電話に SMS が表示されないようにしたいと思います。

4

2 に答える 2

0

いいえ、あなたが説明したシナリオのキャリアとして SMS を使用することはできません。SMS はストア アンド フォワード サービス (その点では電子メールに似ています) であり、受信者の電源が入っていないか、圏外 (ある時点) でない場合、携帯電話会社はメッセージを長時間 (数日) 保存する可能性があることに注意してください。破棄されますが、それはオペレーターが決定するまでです)。

于 2013-05-08T16:43:16.477 に答える