Android: Using WebView outside an Activity context

前端 未结 10 2122
执念已碎
执念已碎 2020-11-27 03:20

I am trying to achieve Web Scraping through a background IntentService that periodically scrape a website without a view displaying on the users phone.

  • Since
10条回答
  •  误落风尘
    2020-11-27 03:58

    You can display a webview from a service. Code below creates a window which your service has access to. The window isn't visible because the size is 0 by 0.

    public class ServiceWithWebView extends Service {
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
            params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
            params.gravity = Gravity.TOP | Gravity.LEFT;
            params.x = 0;
            params.y = 0;
            params.width = 0;
            params.height = 0;
    
            LinearLayout view = new LinearLayout(this);
            view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
    
            WebView wv = new WebView(this);
            wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
            view.addView(wv);
            wv.loadUrl("http://google.com");
    
            windowManager.addView(view, params);
        }
    }
    

    Also this will require the android.permission.SYSTEM_ALERT_WINDOW permission.

提交回复
热议问题