繁体   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