我正在尝试在 IntentService 的 onHandleIntent()方法中注册DownloadManager.ACTION_DOWNLOAD_COMPLETE接收器,并在 onDestroy()中取消注册接收器IntentService的方法。但我认为它没有注册,因为一旦下载完成,接收器的onReceive()方法就不会被触发。 任何人都可以帮我这个吗?
答案 0 :(得分:3)
创建服务类
$resource
在活动中,
public class ConnectionBroadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
IConnectionCallback callback = (IConnectionCallback) context;
callback.finishDownload();
}
创建界面,并在活动中实施并定义下载
后要执行的操作 ConnectionBroadReceiver broadReceiver = new ConnectionBroadReceiver();
registerReceiver(broadReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
最后在清单中注册服务,
public interface IConnectionCallback {
void finishDownload();
}
答案 1 :(得分:0)
以下代码为from here:
public class MyWebRequestService extends IntentService{
public static final String REQUEST_STRING = "myRequest";
public static final String RESPONSE_STRING = "myResponse";
public static final String RESPONSE_MESSAGE = "myResponseMessage";
private String URL = null;
private static final int REGISTRATION_TIMEOUT = 3 * 1000;
private static final int WAIT_TIMEOUT = 30 * 1000;
public MyWebRequestService() {
super("MyWebRequestService");
}
@Override
protected void onHandleIntent(Intent intent) {
String requestString = intent.getStringExtra(REQUEST_STRING);
String responseString = requestString + " " + DateFormat.format("MM/dd/yy h:mmaa", System.currentTimeMillis());
String responseMessage = "";
SystemClock.sleep(10000); // Wait 10 seconds
Log.v("MyWebRequestService:",responseString );
// Do some really cool here
// I am making web request here as an example...
try {
URL = requestString;
HttpClient httpclient = new DefaultHttpClient();
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);
HttpGet httpGet = new HttpGet(URL);
HttpResponse response = httpclient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseMessage = out.toString();
}
else{
//Closes the connection.
Log.w("HTTP1:",statusLine.getReasonPhrase());
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
Log.w("HTTP2:",e );
responseMessage = e.getMessage();
} catch (IOException e) {
Log.w("HTTP3:",e );
responseMessage = e.getMessage();
}catch (Exception e) {
Log.w("HTTP4:",e );
responseMessage = e.getMessage();
}
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(MyWebRequestReceiver.PROCESS_RESPONSE);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(RESPONSE_STRING, responseString);
broadcastIntent.putExtra(RESPONSE_MESSAGE, responseMessage);
sendBroadcast(broadcastIntent);
}
}
IntentFilter filter = new IntentFilter(MyWebRequestReceiver.PROCESS_RESPONSE);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new MyWebRequestReceiver();
registerReceiver(receiver, filter);
@Override
public void onDestroy() {
this.unregisterReceiver(receiver);
super.onDestroy();
}
public class MyWebRequestReceiver extends BroadcastReceiver{
public static final String PROCESS_RESPONSE = "com.as400samplecode.intent.action.PROCESS_RESPONSE";
@Override
public void onReceive(Context context, Intent intent) {
String responseString = intent.getStringExtra(MyWebRequestService.RESPONSE_STRING);
String reponseMessage = intent.getStringExtra(MyWebRequestService.RESPONSE_MESSAGE);
TextView myTextView = (TextView) findViewById(R.id.response);
myTextView.setText(responseString);
WebView myWebView = (WebView) findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
try {
myWebView.loadData(URLEncoder.encode(reponseMessage,"utf-8").replaceAll("\\+"," "), "text/html", "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
public class MyWebRequestService extends IntentService{
public static final String REQUEST_STRING = "myRequest";
public static final String RESPONSE_STRING = "myResponse";
public static final String RESPONSE_MESSAGE = "myResponseMessage";
private String URL = null;
private static final int REGISTRATION_TIMEOUT = 3 * 1000;
private static final int WAIT_TIMEOUT = 30 * 1000;
public MyWebRequestService() {
super("MyWebRequestService");
}
@Override
protected void onHandleIntent(Intent intent) {
String requestString = intent.getStringExtra(REQUEST_STRING);
String responseString = requestString + " " + DateFormat.format("MM/dd/yy h:mmaa", System.currentTimeMillis());
String responseMessage = "";
SystemClock.sleep(10000); // Wait 10 seconds
Log.v("MyWebRequestService:",responseString );
// Do some really cool here
// I am making web request here as an example...
try {
URL = requestString;
HttpClient httpclient = new DefaultHttpClient();
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);
HttpGet httpGet = new HttpGet(URL);
HttpResponse response = httpclient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseMessage = out.toString();
}
else{
//Closes the connection.
Log.w("HTTP1:",statusLine.getReasonPhrase());
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
Log.w("HTTP2:",e );
responseMessage = e.getMessage();
} catch (IOException e) {
Log.w("HTTP3:",e );
responseMessage = e.getMessage();
}catch (Exception e) {
Log.w("HTTP4:",e );
responseMessage = e.getMessage();
}
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(MyWebRequestReceiver.PROCESS_RESPONSE);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(RESPONSE_STRING, responseString);
broadcastIntent.putExtra(RESPONSE_MESSAGE, responseMessage);
sendBroadcast(broadcastIntent);
}
}
IntentFilter filter = new IntentFilter(MyWebRequestReceiver.PROCESS_RESPONSE);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new MyWebRequestReceiver();
registerReceiver(receiver, filter);
@Override
public void onDestroy() {
this.unregisterReceiver(receiver);
super.onDestroy();
}
public class MyWebRequestReceiver extends BroadcastReceiver{
public static final String PROCESS_RESPONSE = "com.as400samplecode.intent.action.PROCESS_RESPONSE";
@Override
public void onReceive(Context context, Intent intent) {
String responseString = intent.getStringExtra(MyWebRequestService.RESPONSE_STRING);
String reponseMessage = intent.getStringExtra(MyWebRequestService.RESPONSE_MESSAGE);
TextView myTextView = (TextView) findViewById(R.id.response);
myTextView.setText(responseString);
WebView myWebView = (WebView) findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
try {
myWebView.loadData(URLEncoder.encode(reponseMessage,"utf-8").replaceAll("\\+"," "), "text/html", "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
在Manifest中创建服务。