2016-03-17 4 views
0

Я отправляю значение прогресса, например int progress = 10 через Broadcast от IntentService, чтобы отобразить ход загрузки файла.BroadcastReceiver не получает трансляцию от IntentService в Android

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); 
    } 
} 

В каких случаях может возникнуть проблема? Что я делаю не так? Я что-то забыл?

Спасибо за помощь!

С уважением!

+0

пожалуйста, вы можете зарегистрировать передачу в OnStart и снимите его зарегистрировать OnStop – dex

+0

есть большая разница? Я вижу некоторые ppl, использующие onResume и другие onStart ... Так что же теперь верно? – raymondis

+0

У вас есть приемник в вашем манифесте? –

ответ

2

попытка зарегистрировать вас ресивер, как показано ниже -

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

во время трансляции вы отправляете действие, как показано ниже

broadcastIntent.setAction(SendList.mReceiver.TEST); 

и при регистрации он отличается.

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

Ваше действие должно быть одинаковым при отправке и приеме. Надеюсь, это вам поможет.

+0

Какова ценность обоих, SendList.mReceiver.TEST и FragmentReceiver.TEST? –

+0

это одинаково. Это 'public static final String TEST =" upload ";' – raymondis

+0

Он все еще не работает. – raymondis

Смежные вопросы