我正在创建一个像这样的"浮动"WebView:
public class MyService extends Service {
public static WindowManager windowManager;
public static LinearLayout mainView;
public WebView webView;
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
// main view
mainView = (LinearLayout) inflater.inflate(R.layout.popup, null);
WindowManager.LayoutParams mainViewParams = new WindowManager.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
windowManager.addView(mainView, mainViewParams);
// main view - web views
webView = (WebView) mainView.findViewById(R.id.webView1);
webView.setWebViewClient(new WebViewClient());
}
}
Run Code Online (Sandbox Code Playgroud)
主视图是包含WebView的LinearLayout.创建服务时会显示主视图,并且不会附加到任何活动.由于WindowManager.LayoutParams.TYPE_PHONE旗帜,视图可以漂浮在其他活动之上.
问题是,我无法选择WebView中显示的任何文本.如果我按住某个单词,则选择显示然后会很快消失.用于复制文本等的操作栏不会显示,也不会显示Marshmallow中的上下文菜单.
这是否发生是因为我的观点没有附加到活动?我曾经使用活动和文本选择来实现我的浮动视图工作正常,但我最近改为这种"无活动"方法,因为当我显示/隐藏时我不想处理所有不必要的活动生命周期管理视图.
如何获取文本选择(在我的WebView中)?
编辑:此问题不是WebView特定的.我在主视图中添加了一个EditText,我也无法从中选择文本.
编辑2 …
我读过很多像这样的问题,但似乎都没有解决我的问题.
问题在于:
AlertScreen ad = new AlertScreen(SensorListenerService.this);
Run Code Online (Sandbox Code Playgroud)
在我的服务类中:
public class SensorListener extends Service implements SensorEventListener {
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(Process.myPid(), new Notification());
AlertScreen ad = new AlertScreen(SensorListener.this); //problem
ad.show();
return START_STICKY;
}
...
Run Code Online (Sandbox Code Playgroud)
它调用我的AlertScreen类:
public class AlertScreen extends AlertDialog {
public AlertScreen(Context context) {
super(context);
}
...
Run Code Online (Sandbox Code Playgroud)
LogCat有什么要说的:

谁能解释一下这个问题呢?
我有一个监视前台应用程序的后台服务。它用于保护某个应用程序,这样,如果受保护的应用程序在前台,然后由于另一个应用程序启动而被推送到后台,它将向用户显示另一个应用程序已接管前台应用程序的通知。
我能够检测到该开关,但是有什么方法可以显示Toast通知/ AlertDialog,以便在检测到该警报后在服务中提醒用户?
android toast android-service android-notifications android-alertdialog