abortBroadcast()
アプリケーションに、メソッドを呼び出すブロードキャスト レシーバーがあります。そのため、受信 SMS のブロードキャストをキャンセルし、特定のコンテンツが利用可能かどうかを確認します。利用可能なアプリケーションがある場合は、いくつかのタスクを実行します。それ以外の場合clearAbortBroadcast()
は、受信トレイへの SMS のブロードキャストを続行するメソッドが呼び出されます。また、マニフェスト ファイルの優先度としてより高い値を設定しました。
アプリケーションの開発にAndroid 2.2バージョンを使用しています。エミュレーターではすべてが正常に機能しており、期待どおりの結果が得られます。しかし、を持っている電話でアプリケーションをテストすると、動作4.0.4 version (ICS)
しません。メッセージ ブロードキャストのキャンセルは発生せず、特定のコンテンツを含むすべての受信 SMS は、通常の SMS のように受信ボックスに到達します。
PS : エミュレーターではすべて正常に動作します。優先度は「999999」と高く設定しています。すべての権限が含まれています。
これがコードスニペットです。
public class SMSReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
this.abortBroadcast();
final String pinNumber = "abcd";
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String smsMsg = "";
String replyPhoneNum = "";
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]);
smsMsg += "SMS From " + msgs[i].getOriginatingAddress();
smsMsg += "\n";
smsMsg += msgs[i].getMessageBody().toString();
smsMsg += "\n";
replyPhoneNum = msgs[i].getOriginatingAddress();
}
}
if(smsMsg.contains("SecretCode: "+pin+"\n"))
{
String[] splitMsg = smsMsg.split("\\n");
String[] splitFeatures;
Bundle b = new Bundle();
splitMsg = smsMsg.split("\\n");
for(int i=0; i<splitMsg.length; i++)
{
if(!(splitMsg[i].equalsIgnoreCase("null")))
{
splitFeatures = splitMsg[i].split(":");
if(splitFeatures[0].equals("Contact Number"))
{
String contactName = splitFeatures[1];
b.putString("contactname", contactName);
}
}
if(splitMsg[i].contains("email"))
{
String email = "email";
b.putString("email", email);
}
}
b.putString("replyPhoneNum", replyPhoneNum);
Intent i = new Intent(context, NextActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtras(b);
context.startActivity(i);
}
else
{
this.clearAbortBroadcast();
}
}
}
Android マニフェスト ファイルでは、
<receiver android:name="SmsReceiver">
<intent-filter android:priority="999999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
それでおしまい。他のすべての権限は正しく使用されています。これはエミュレータで正常に動作します。しかし、デバイスで動作していません。