【发布时间】:2016-03-16 04:10:02
【问题描述】:
我正在尝试在所有活动之上播放 Youtube 视频,所以我使用了 SYSTEM_ALERT_WINDOW,现在我试图从服务启动 YoutubeSupportFragment,这是我在 FloatingWindow 服务中的 onCreate 方法
public class FloatingWindow extends Service{
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
linearLayout = new LinearLayout(this);
LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
linearLayout.setLayoutParams(linearLayoutParams);
final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(400,400, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
parameters.x = 0;
parameters.y = 0;
parameters.gravity = Gravity.CENTER | Gravity.CENTER;
linearLayout.addView(stop);
windowManager.addView(linearLayout, parameters);
linearLayout.setOnTouchListener(new View.OnTouchListener() {
private WindowManager.LayoutParams updatedParameters = parameters;
int x, y;
float touchedX, touchedY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x = updatedParameters.x;
y = updatedParameters.y;
touchedX = event.getRawX();
touchedY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
updatedParameters.x = (int) (x + (event.getRawX() - touchedX));
updatedParameters.y = (int) (y + (event.getRawY() - touchedY));
windowManager.updateViewLayout(linearLayout, updatedParameters);
break;
default:
break;
}
return false;
}
});
}
这是我想要显示为浮动窗口的 XML 文件
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/COLOR_BACKGROUND">
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/youtube_fragment"
android:name="com.example.youtube.YoutubePlayerView"/>
</LinearLayout>
问题是,在 onCreate 上,我尝试使用 XML 文件填充 linearLayout,我得到片段的 ClassNotFoundException,我认为这很明显,因为我没有实例化片段。
我也无法使用 FragmentTransaction 将 XML 文件添加到我的 linearLayout,因为我无法从服务类中访问 FragmentManager。
有什么想法可以让 youtube 播放器作为浮动窗口播放吗??
【问题讨论】:
-
我知道这是一个老问题,但你做到了吗?(我也在尝试制作一个浮动 youtube 播放器)
-
@Guest1997 是的,我让它工作了,但没有使用视频视图,而是切换到了 WebView。很久以前写过这段代码,但它很乱,我可以把它给你,但它工作得很好,你只需将 youtube id 传递给服务,其他一切都会得到处理。
标签: android xml android-fragments android-youtube-api