1

こんにちは、Android サービスからブロードキャスト レシーバーに 2 つの変数を送信しようとしています。ここで助けが必要です。

ここでは、サービス クラスの oncreate メソッドで 2 つの変数を設定しています。

    @Override
public void onCreate() {

    super.onCreate();


    Intent eSendIntent = new Intent(getApplicationContext(), OutgoingCallReceiver.class);

    eSendIntent.putStringArrayListExtra("BlockArray", contactsListB);
    eSendIntent.putExtra("BlockBool", checkB);
    getApplicationContext().sendOrderedBroadcast(eSendIntent, null);//Call receiver



 }

そして私のレシーバークラスでは...

onReceive(Context context, Intent intent){
Bundle bundle = intent.getExtras();

            if(bundle == null)
                    return;


            boolean cb = bundle.getBooleanExtra("BlockBool", true);
            ArrayList<String> ab = bundle.getStringArrayListExtra("BlockArray");


//disconnecting
            try{

                if(cb==false){
                for(int ij = 0; ij < ab.size(); ij++){
                    if(ab.get(ij).contains(phonenumber)){

                        tempBoolean = true;
                        //Log.e("OutgoingCallReceiver", SmsBlockerService.contactsListB.get(ij));
                    }
                }//for loop
                    if(tempBoolean==true){

                setResultData(null);
                        Toast.makeText(context, phonenumber + " is Blocked", Toast.LENGTH_SHORT).show();
                    }

            }else{
                setResultData(null);

                Toast.makeText(context, "All Out-Going Calls are Blocked", Toast.LENGTH_SHORT).show();
            }//end of main if

                    } catch(Exception e){
                        Toast.makeText(context, "Detect Calls sample application Failed: ", Toast.LENGTH_LONG).show();
             }
}

ログキャット:

E/BroadcastReceiver(1459): BroadcastReceiver が順序付けされていないブロードキャスト中に結果を返そうとしています

4

3 に答える 3

0

放送受信機が動作するには、それが書かれているアクティビティ/画面が稼働している必要があります。レシーバーが渡されたインテントとその値を受け取ることができるようにします。

于 2013-05-30T09:02:24.030 に答える
0

受信者を登録したと仮定して、小さな変更を加えてみます。

        boolean cb = bundle.getBooleanExtra("BlockBool", true);
        ArrayList<String> ab = bundle.getStringArrayListExtra("BlockArray");

アップデート:

作成時に...次のようにブロードキャストを呼び出します...

  sendOrderedBroadcast(eSendIntent);

setResultData() 関数は OrderedBroadcast でのみ機能するため、そのエラーに直面しています。

Android ドキュメントから:

   public final void setResultCode (int code)

   Added in API level 1
   Change the current result code of this broadcast; only works with broadcasts sent
   through Context.sendOrderedBroadcast. Often uses the Activity RESULT_CANCELED and  
   RESULT_OK constants, though the actual meaning of this value is ultimately up to the
   broadcaster.

   This method does not work with non-ordered broadcasts such as those sent with 
   Context.sendBroadcast.
于 2013-05-30T08:58:35.150 に答える