我希望“最小化”应用程序,让它处于后台,这样做与当用户单击按钮(但不完成)时按下幽灵按钮模式时所做的完全相同--我怎么做呢?
到目前为止,我能够创建一个Activity。我已经初始化了我的成员,并用“WebView”加载了https://www.youtube.com。我还可以创建一个Service,它允许我最小化Activity,但我想要的是最小化已经加载的WebView。问题当Activity暂停时,WebView也暂停。
我现在想要的
MainActivity,它只会成为服务器,并在按下鬼影模式btn后向我显示Notification控件。,我到目前为止处理的事情,
屏幕方向,意味着Activity不重新创建WebView。如果我在看一些视频,它只是暂停屏幕方向的视频。
我想要什么答案
Activity成为一项服务吗?SplashActivity来打开这个make MainActivity,然后按一下按钮使这个Service。AndroidManifest.xml
<service android:enabled="true" android:name=".Services.GhostModeService" />
android:hardwareAccelerated="true"
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:label="@string/app_name"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG,"classmain-> onCreate");
initializeM();
settingWebview();
initializeNavigationTab();
myoutube.loadUrl(URL);
ghostModeServiceIntent=new Intent(MainActivity.this,GhostModeService.class);
},这些是我的设置.
private void settingWebview() {
myoutube.setWebViewClient(new Myyoutube());
myoutube.getSettings().setLoadsImagesAutomatically(true);
myoutube.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
myoutube.getSettings().setBuiltInZoomControls(false);
myoutube.getSettings().setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
myoutube.getSettings().setMediaPlaybackRequiresUserGesture(true);
myoutube.getSettings().setJavaScriptEnabled(true);
myoutube.getSettings().setPluginState(WebSettings.PluginState.ON);
}GhostmodeService
private WindowManager mWindowManager;
private View mGhostmode;
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"classghostservice-> onCreate()");
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mGhostmode = inflater.inflate(R.layout.layout_ghostmode,null,false);
//setting the layout parameters
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
500,
500,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.x=0;
params.y=0;
params.gravity=Gravity.END | Gravity.BOTTOM;
//getting windows services and adding the floating view to it
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mGhostmode, params);
}方法,该方法创建通知。此通知将恢复MainActivity。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG,"classghostservice-> onstartCommand()");
foregroundNotification(1);
return START_NOT_STICKY;
}发布于 2019-01-22 22:17:41
解决了一个星期后,我能够回答这个期待已久的问题,如何在后台使用Webview运行Youtube。是的,webview需要UI来运行我们不能在后台使用服务运行它,即使你找到了你的方式,你仍然会遇到问题。
巧妙的技巧如下:
android.permission.SYSTEM_ALERT_WINDOW,因为您想要使一个浮动窗口保持在其他应用程序之上。MainActivity,此时请忘记setContentView(R.layout.activity_main);,而需要使用windowManager.addView(yourLayout, yourWindowParams);在WindowManager中添加布局activity_main.xml
在我的布局中,我的父布局是DrawerLayout
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent".....因此,我必须定义我的成员变量如下
private static DrawerLayout windowMain;MainActivity
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
windowMain = (DrawerLayout) inflater.inflate(R.layout.activity_main, null);windowMain,您必须调用
findViewById()eg
windowMain.findViewById(R.id.btn);
windowMain.findViewById(R.id.webview);WindowManager.LayoutParams。初始化参数。
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,PixelFormat.TRANSLUCENT( WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);expandParams.gravity = Gravity.START WindowManager.LayoutParams.MATCH_PARENT Gravity.TOP;expandParams.x = 0;expandParams.y = 0;所有这些都是为了使窗口在周围浮动并占据整个屏幕,然后做您需要做的事情,比如使用URL在webview中加载wv.loadURL(url)。这确保了我们已经在窗口中加载了我们的we视图,我们只需要更新我们的windowMain w:0 的参数,这样就可以通过设置w:0和 h:0 而不是 MATCH_PARENT来最小化它,甚至完全消失。
您可以拥有一个更新窗口的btn_ghost,如:
windowManager.updateViewLayout(windowMain, ghostParams);moveTaskToBack(true); --这将停止活动,将它移动到任务,因为我们不需要它。当完成创建但停止的活动时,我们必须删除windowMain。
windowManager.removeView(windowMain);finish()https://stackoverflow.com/questions/54236715
复制相似问题