web-dev-qa-db-ja.com

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

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

100
umakant

はい。

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

Android 1.6の時点で、着信SMSメッセージブロードキャスト(Android.provider.Telephony.SMS_RECEIVED)は「 ordered broadcast 」として配信されます。つまり、コンポーネントが最初にブロードキャストを受信するシステム。

SMSリスニングAndroid:priority<intent-filter>属性を定義すると、ネイティブSMSアプリケーションの前に通知を受け取ります。

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


更新(2013年10月):Android 4.4が到着すると、SMS AP​​Iに変更を加えますSMS配信に影響を与えるアプリの機能に影響を与える可能性があります。
詳細については、このAndroid Developersブログ投稿をご覧ください。
http://Android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-KitKat.html

186
Christopher Orr

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

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

Step-2 AndoridManifestにブロードキャストレシーバーを登録し、Android:priority値に大きな数値を設定します

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

Thats It

上記のコードの仕組み

SMSブロードキャストの受信は、優先度の高い受信機が最初に受信するように順序付けられたブロードキャストです。受信ボックスに存在しません

11

Below( "Android:priority" and abortBroadcast())ソリューションは、Android Messagingアプリケーションをデフォルトとして使用します(ストックAndroid Messagingアプリケーション)を意味します。ユーザーが「GoSMSPro」または「HandcentSMS」をインストールした場合、これらのアプリケーションは引き続き受信ボックスにメッセージを表示しますが、これは「Android:priority」によるものと考えられます。電話で。

9
Subba
/**
 * 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);
    }
}

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

1
taran mahal

このようなシナリオがあり、この連絡先番号「+ 44xxxxx」などに関連するメッセージを削除または無視する場合は、SMS Broadcast receiver

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

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

0
Pir Fahim Shah