【问题标题】:Start fragment from Service从服务开始片段
【发布时间】: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


【解决方案1】:

在您的服务中,启动一个新活动,其唯一目的是附加/显示此片段。 如果您不想要此片段/活动的多个实例,请将您的活动设置为清单文件中的 SingleTop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2013-03-06
    相关资源
    最近更新 更多