我有一个应用程序,它每分钟检查一个特定的网站,看看它是否找到了我正在寻找的任何东西,然后在找到该项目时通知我(播放声音)。我按照这个 tut 让我的应用程序在后台运行,但我注意到它抱怨 WebView。
http://marakana.com/forums/android/examples/60.html
如果无法在服务中使用 WebView,我有什么替代方法来实现相同的目标?
我有一个应用程序,它每分钟检查一个特定的网站,看看它是否找到了我正在寻找的任何东西,然后在找到该项目时通知我(播放声音)。我按照这个 tut 让我的应用程序在后台运行,但我注意到它抱怨 WebView。
http://marakana.com/forums/android/examples/60.html
如果无法在服务中使用 WebView,我有什么替代方法来实现相同的目标?
是的,服务在后台运行,应该不能显示任何 UI。
但是您可以让 Activity(一个 UI 进程)使用 PendingIntent.getService(context, GET_ADSERVICE_REQUEST_CODE, ...) 将其上下文传递给服务。然后,当服务准备好显示时,下面的行应该启动浏览器(或者您拥有的应用程序具有适合自己的 WebView 的 Intent 过滤器)以显示 Web 内容。
Intent i = new Intent(Intent.ACTION_VIEW, url);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, i,
Intent.FLAG_ACTIVITY_NEW_TASK);
不, aWebView
不应该在服务中使用,无论如何它真的没有意义。如果您加载您WebView
的目的是为了抓取其中包含的 html,您不妨运行一个 HttpGet 请求,如下所示——
public static String readFromUrl( String url ) {
String result = null;
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet( url );
HttpResponse response;
try {
response = client.execute( get );
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader( is ) );
StringBuilder sb = new StringBuilder();
String line = null;
try {
while( ( line = reader.readLine() ) != null )
sb.append( line + "\n" );
} catch ( IOException e ) {
Log.e( "readFromUrl", e.getMessage() );
} finally {
try {
is.close();
} catch ( IOException e ) {
Log.e( "readFromUrl", e.getMessage() );
}
}
result = sb.toString();
is.close();
}
} catch( Exception e ) {
Log.e( "readFromUrl", e.getMessage() );
}
return result;
}
是的,您可以从项目的另一个活动中使用静态 Web 视图。例如:MainActivity.web2.loadUrl(""); 在您的服务中。