1

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>

それでおしまい。他のすべての権限は正しく使用されています。これはエミュレータで正常に動作します。しかし、デバイスで動作していません。

4

0 に答える 0