Android 在窗口管理器中启动新活动

Android 在窗口管理器中启动新活动,android,android-intent,android-activity,handler,runnable,Android,Android Intent,Android Activity,Handler,Runnable,我想开始一个新的活动,该活动从一个源播放一个实时流。当我开始活动时,它会在整个屏幕上播放内容。我想在一个小屏幕上显示流的内容,它是一个surfaceview。我是通过使用一个运行runnable等的处理程序来实现的。我就是这样做的: //new activity played from here Intent localIntent3 = new Intent("android.intent.action.MAIN"); //intent flag set to start a new tas

我想开始一个新的活动,该活动从一个源播放一个实时流。当我开始活动时,它会在整个屏幕上播放内容。我想在一个小屏幕上显示流的内容,它是一个surfaceview。我是通过使用一个运行runnable等的处理程序来实现的。我就是这样做的:

//new activity played from here
 Intent localIntent3 = new Intent("android.intent.action.MAIN");
//intent flag set to start a new task over the previous one
 localIntent3.setFlags(270532608);
 startActivity(localIntent3);
一旦这个活动启动,我就在相应的处理程序上运行runnable,它在一个表面视图上呈现流上播放的内容。我是这样做的:

Runnable handlerRuntv = new Runnable() {
        public void run() {
            try {
                MainActivity.this.surfaceView = new SurfaceView(
                        MainActivity.this.getApplicationContext());
                MainActivity.this.openSurfaceView();

                //method to scale the surface view to a smaller display
                MainActivity.this.setPipscale();

            } catch (Exception localException) {
                localException.printStackTrace();
            }
        }
    };
这是我在处理程序上运行它的方式:

      this.handlerTV.postDelayed(handlerRuntv, 300L);
一旦runnable开始在处理程序上运行,我就在设备上执行
后退按钮
,将我带到内容已经播放的上一个活动

问题
:我希望直接在曲面的缩放显示上启动活动,即我不希望用户按下后退按钮查看流。如何做到这一点

**编辑:*

使用片段在片段中启动活动:

//In mainactivity.java
llFragment =(LinearLayout) findViewById(R.id.llfragment);
FragmentTransaction t = getFragmentManager().beginTransaction();
RunTVFragment fragment = new RunFragment();
t.add(llFragment.getId(), fragment, "fragment");
t.commit();

//llfragment in .xml
<LinearLayout
    android:id="@+id/llfragment"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</LinearLayout>
但是,活动不会在所需屏幕区域启动/显示。相反,它是作为新任务启动的,而不是以前的活动

编辑II:

非UIFragment的定义:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        ComponentName localComponentName2 = new ComponentName("mstar.tvsetting.ui", "mstar.tvsetting.ui.RootActivity");
          Intent localIntent3 = new Intent("android.intent.action.MAIN");
          localIntent3.addCategory("android.intent.category.LAUNCHER");
          localIntent3.setComponent(localComponentName2);
          localIntent3.setFlags(270532608);
          startActivity(localIntent3);
          this.handlerTV.postDelayed(handlerRuntv, 1000L);
    }
UI片段
调用
NONUI片段

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

         FragmentManager fm = getFragmentManager();

         // Check to see if we have retained the worker fragment.
         NonUITVFragment mWorkFragment = (NonUITVFragment)fm.findFragmentByTag("work");

         // If not retained (or first time running), we need to create it.
         if (mWorkFragment == null) {
             mWorkFragment = new NonUITVFragment();   //create instance of NON UI Fragment
             // Tell it who it is working with.
             mWorkFragment.setTargetFragment(this, 0);
             fm.beginTransaction().add(mWorkFragment, "work").commit();  //NON UI Fragment
         }
    }
从我的主要活动调用
UI片段

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
        View v = inflater.inflate(R.layout.fragmentlayout, container, false);
        return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
      Intent localIntent3 = new Intent("android.intent.action.MAIN");
      localIntent3.addCategory("android.intent.category.LAUNCHER");
      startActivity(localIntent3);
      this.handlerTV.postDelayed(handlerRuntv, 300L);
}

//fragmentlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/back"
    android:orientation="horizontal" >

  <FrameLayout
            android:id="@+id/surframelayout"
            android:layout_width="340dp"
            android:layout_height="280dp"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/textView1"/>

</RelativeLayout>
if (savedInstanceState == null) {    //UI Fragement
                getFragmentManager().beginTransaction().add(R.id.llfragment, new RunTVFragment()).commit();
            }

我怀疑我是否正确理解了你的问题。也许你可以尝试使用一个没有UI的片段来启动线程而不是活动。

简而言之,我想在当前活动的较小显示中启动一个活动,这将是一个
surfaceview
,因此创建一个活动,2个片段main活动从app开始,根据您的要求进行布局。第一个片段将进行显示。使用第二个没有UI的片段来启动新线程。视图不会改变,线程可以根据需要使用处理程序或直接更新UI,因为它是一个surfaceview。我尝试了您在这里提出的建议,从一个具有自己布局的非UI片段开始活动。但是每当
活动在
oncreateview
中启动时,它都会在整个屏幕上运行,而不是在xml中定义的片段布局上运行。我想我没有正确地传达我的信息。MainActivity(我假设这是应用程序启动时启动的活动)将有2个片段,1个带UI,1个不带UI。您可以根据需要设计布局并显示它。然后使用没有UI的片段来启动线程。4.请查收我已阅读了你提供的文章。。请参阅我现在尝试的问题中的
编辑
。。它仍然不起作用。。