我想實現一個BroadcastReceiver,但它不工作。 我想用它從一個實現網絡io的類返回進度,這是從我的Activity中的一個AsyncTask調用的。如何在Android中實現BroadcastReceiver
這裏是我的活動代碼:
package com.ClinicalInterface;
public class TestActivity extends ListActivity {
static AsyncDataLoader mAsyncDataLoader;
static ProgressDialog dialog;
static ArrayList<String> list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dialog = new ProgressDialog(this);
dialog.setMessage("Loading...");
dialog.show();
mAsyncDataLoader = new AsyncDataLoader();
mAsyncDataLoader.execute();
}
public class AsyncDataLoader extends AsyncTask<Void, Integer, String> {
public class mTestReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
System.out.println("I've received something!");
publishProgress(2);
}
}
@Override
protected String doInBackground(Void ... params) {
TestLoader tl = new TestLoader();
tl.setContext(getApplicationContext());
tl.setServeraddress("192.168.2.109");
list = tl.doLST(null);
return "COMPLETE!";
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
if (values[0] == 2) {
dialog.setMessage("Loading data ...");
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dialog.dismiss();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(TestActivity.this, R.layout.list_item, list);
TestActivity.this.setListAdapter(adapter);
}
}
}
這應該顯示一個列表,然後在該列表中的數據從服務器返回一個進度對話框覆蓋這一點。這工作正常。 我想在網絡io完成時更新進度對話框中的文本。 這是一個實現了網絡IO代碼:
package com.ClinicalInterface;
public class TestLoader {
private Context mContext;
public void setContext(Context context) {
mContext = context;
}
public ArrayList<String> doLST(String arg) {
// Send intent to AsyncTask
Intent intent = new Intent(mContext, mTestReceiver.class);
intent.setAction("PROGRESS");
mContext.sendBroadcast(intent);
System.out.println("message sent");
// Code that actually does network io removed for brevity
}
}
在我已經添加了以下Android清單文件:
<activity android:name="TestActivity" android:label="TestActivity">
<receiver android:name=".AsyncDataLoader.mTestReceiver">
<intent-filter>
<action android:name="android.intent.action.PROGRESS" />
</intent-filter>
</receiver>
</activity>
我得到 但不是在日誌打印「發送消息」日誌打印「我收到了一些東西」
我是一個Android新手,所以我假設我沒有正確實施。 任何想法?
當創建意圖時,使用意圖過濾器和一組操作更新了原始帖子。還是行不通。
所以,你的廣播接收器應該啓動,當你收到一條消息? –
不可以。接收方應在收到發送意圖後收到意圖。它在DoLST被調用時發送。 一旦我有了意圖發送一次,我可以發送多次,因爲網絡io進展 - 然後我可以用它來更新ui與調用publishProgress。 – AndroidJerry