WebView可以在服务中使用吗?

时间:2013-03-16 21:53:10

标签: android android-webview android-service

我有一个应用程序,每隔一分钟检查一个特定的网站,看它是否找到我要找的东西,然后每当找到该项目时通知我(播放声音)。我跟着这个tut让我的应用程序在后台运行,但我注意到它抱怨了WebView。

http://marakana.com/forums/android/examples/60.html

如果无法在服务中使用WebView,那么实现相同目标的替代方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

是的,服务在后台运行,无法显示任何UI。

但是您可以使用PendingIntent.getService(context,GET_ADSERVICE_REQUEST_CODE,...)将Activity(UI进程)传递给服务。然后,当服务准备好显示时,下面的行应该启动浏览器(或者你自己的应用程序,并为自己的WebView使用适当的Intent Filter)来显示Web内容。

            Intent i = new Intent(Intent.ACTION_VIEW, url);
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0, i,
                    Intent.FLAG_ACTIVITY_NEW_TASK);

答案 1 :(得分:0)

不,不应该在服务中使用WebView,无论如何它真的没有意义。如果你正在加载你的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;
}

答案 2 :(得分:0)

是的,您可以在项目的其他活动中使用静态Webview。 例如: MainActivity.web2.loadUrl(“”); 在您的服务中。