簡體   English   中英

BroadcastReceiver無法從Android中的IntentService接收廣播

[英]BroadcastReceiver not receiving broadcast from IntentService in Android

我正在通過IntentService通過Broadcast發送進度值,例如int progress = 10 ,以顯示上傳文件的進度。

protected void onHandleIntent(Intent intent) {

    broadcastIntent = new Intent();
    broadcastIntent.setAction(SendList.mReceiver.TEST);
    try {
        broadcastIntent.putExtra("Count",mArraylist.size());
        [...uploading data...]
        for (int i = 0; i < mArrayList.size(); i++) {
            broadcastIntent.putExtra("progress", i);
            sendBroadcast(broadcastIntent);
            //...
        }
}

因此,在我的Activity我注冊了接收者,但從未調用過它。

public class SendList extends Activity {
TextView textResult;
ProgressBar progressbar;
boolean mIsReceiverRegistered = false;
BroadcastReceiver receiver;

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.sendlist);
    textResult= (TextView)findViewById(R.id.maxFragments);
    progressbar = (ProgressBar) findViewById(R.id.progressBar);
}


@Override
public void onResume() {
    super.onResume();
    if(!mIsReceiverRegistered) {
        if (receiver == null)
            receiver = new FragmentReceiver();
        registerReceiver(receiver,new IntentFilter(mReceiver.TEST));
        mIsReceiverRegistered = true;
    }
}

@Override
public void onPause() {
    super.onPause();
    if(mIsReceiverRegistered) {
        unregisterReceiver(receiver);
        receiver = null;
        mIsReceiverRegistered = false;
    }
}

private void updateUI (Intent intent) {
    progressbar.setProgress(intent.getIntExtra("progress", 0));
}

public class mReceiver extends BroadcastReceiver {
    public static final String TEST = "upload";
    @Override
    public void onReceive(Context context, Intent intent) {
        int count = intent.getIntExtra("Count",0);
        progressbar.setMax(count);
        textResult.setText(count);

        updateUI(intent);
    }
}

問題可能出在哪里? 我究竟做錯了什么? 我忘記了什么嗎?

謝謝你的幫助!

親切的問候!

嘗試如下注冊您的接收者-

IntentFilter filter = new IntentFilter();
filter.addAction(SendList.mReceiver.TEST);
registerReceiver(receiver,filter);

在廣播時,您正在發送以下操作

broadcastIntent.setAction(SendList.mReceiver.TEST);

和當您注冊時有所不同。

registerReceiver(receiver,new IntentFilter(FragmentReceiver.TEST));

發送和接收時,您的操作應相同。 希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM