受信トレイに到達する前にAndroidでSMSを削除できますか?


100

受信トレイからSMSを削除していますが、知りたい:受信トレイに到達する前に削除するにはどうすればよいですか?


2
j2eeは本当にここで一致するタグですか?
ジッタ

1
なぜJavaが正しくないのですか?AndroidのJavaでプログラミングしないのですか?
ジッタ

3
この悪の悪臭。これを行うべきではありません。
MattC、2009年

43
正当な用途があります!たとえば、盗まれた場合に備えて、SMSを介して電話で何か(GPS位置情報の送信、ワイプなど)を実行したい場合。電話を盗んだ人にそのSMSメッセージを見せたくない。
ポリグロット

21
人に来て!これは間違いなく「悪」ではありません。@polyglotは正しいです!(Viberと同様に)ユーザーの番号を確認するためのアプリケーションを実行していますが、それが必要です。すべてを「悪」として使用できます。邪悪なアプリをインストールしないでください。
フェリペ

回答:


187

はい。

この質問に対するいくつかの否定的な反応にもかかわらず、SMS傍受の正当な使用法があります。例:電話番号の検証の自動化、SMSを介してプロビジョニングされるサービス(通常、これはデータSMSを使用して行う必要があります)、または特別な形式のメッセージを処理してユーザーエクスペリエンスを向上させ、素敵なAndroidで表示するアプリケーションの場合固有のUI。

Android 1.6以降、着信SMSメッセージブロードキャスト(android.provider.Telephony.SMS_RECEIVED)は「順序付きブロードキャスト」として配信されます。つまり、最初にブロードキャストを受信するコンポーネントをシステムに通知できます。

android:prioritySMSリスニング<intent-filter>で属性を定義すると、ネイティブSMSアプリケーションの前に通知が届きます。

この時点で、ブロードキャストをキャンセルして、他のアプリに反映されないようにすることができます。


アップデート(2013年10月): Android 4.4がリリースされると、SMS APIに変更が加えられ、SMS配信に影響を与えるアプリの機能に影響する可能性があります。
詳細については、このAndroid Developersブログの投稿を確認してください:http :
//android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html


13
聖なる神。これは本当です!私はそれが逆になるといつも思っていました!証拠として、ここを見てください。ワオ。私はあなたに複数の賛成票を与えることができるといいのですが;)
Hamy

1
@kakopappa:はい、回答で述べたように、Android 1.6以降で動作します。
Christopher Orr、2011

1
@herom優先度を使用するアプリがある1000ので、可能です。実際、Handcentは優先度を使用しています2147483647
Christopher Orr

2
これは私にとってはうまくいきました:)私のアプリは最初にメッセージをキャッチし、通知はありませんが、その後SMSがメッセージの受信トレイに届きません。それが私のアプリだけで、決して受け取られなかったように。中止ブロードキャストを使用する方法はありますが、受信トレイでメッセージを受信する方法はありますか?
pandabear 2012

7
@ChristopherOrrが更新で言っているように、新しいAPIレベル19に留意することが重要です。そこは言う"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
GoRoS 2014年

11

手順1: SMSを受信するカスタムブロードキャストレシーバーを作成します。メッセージを受信トレイで利用できないように、最も広い範囲を中止するロジックを記述します

public class SMSReceiver extends BroadcastReceiver
{
    public void onReceive(Context context, Intent intent)
    {
     if(conditionMatches){
     abortBroadcast();
     }
    }
}

ステップ -2 AndoridManifestにブロードキャストレシーバーを登録し、android:priorityの値を大きくする

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

それでおしまい

上記のコードはどのように機能しますか

ブロードキャストを受信するSMSは順序付けされたブロードキャストであるため、優先度の高いレシーバが最初に受信するため、アプリケーションが最初に受信し、受信後にブロードキャストを中止します。したがって、他のアプリケーションはそれを受信できません。したがって、SMSは受信トレイに存在しません


ときに、ユーザーを押すメッセージ受信箱我々は..私はロック画面を開発できるように、放送受信機を持つことができます
Vamsi Pavanマヘシュ

9

以下の( "android:priority"およびabortBroadcast())ソリューションは、Androidメッセージングアプリケーションがデフォルトである限り機能します(私はストックのAndroidメッセージングアプリケーションを意味しました)。ユーザーが「GoSMSPro」または「HandcentSMS」をインストールしても、これらのアプリケーションは引き続き受信トレイにメッセージを表示しますが、これは「android:priority」が原因であると考えています。サードパーティのメッセージングアプリケーションが電話にインストールされている場合、上記の問題を解決するためのより良い方法はありません。


2
いい視点ね。しかし、これは答えではなくコメントであるべきです。移動できますか?---そして、非常に高い値を設定するとどうなりますか?android:priority = "9999"として?例えば?試しましたか?
フェリペ

4
@FelipeMicaroniLalliは実際にSMS PROなどを実行します...優先度には2147483647を使用します
rf43

1
@DDoSAttack 2147483647が最大ですか?
フェリペ

3
これは、最大の符号なし整数である)en.wikipedia.org/wiki/Integer_(computer_science Androidのサポートが999であることを最大developer.android.com/reference/android/content/...
rf43

2
@NomanHamidそうですね。999が最大の優先順位です。選択した番号を使用できますが、Androidでは999までしか保証されません。それよりも大きいものは、不安定になる場合もあれば、そうでない場合もあり、意図しない結果が生じることがあります。個人的に、私は2147483647を使用してGO SMS PROなどのアプリを調べようとしました。ユーザーにとってはうまくいく場合もあれば、うまくいかない場合もあります。
rf43

1
/**
 * Check priority
 * @param activity
 */
public static void receiverPriority(Activity activity){

    Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
    List<ResolveInfo> infos =  activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0);
    for (ResolveInfo info : infos) {
        System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
    }
}

優先度を確認し、他の受信者よりも(マニフェストで)高い優先度を設定します。


0

このようなシナリオがあり、この連絡先番号「+ 44xxxxx」などに関連するメッセージを削除または無視する場合は、SMSブロードキャストレシーバーでこのコードを使用してください

 if(sender.equalsIgnoreCase("+44xxxxxx")
   this.abortBroadCast();

また、それを高優先度に設定する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.