我有1个MainActivity,1个SurfaceView,1个 Player类继承activity。
请问要如何在sufaceView里启动并且执行该继承了activity的Player类呢?我的主要 MainActivity 代码:public class MainActivity extends Activity { @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new MySurfaceView(this));
}

解决方案 »

  1.   

    首先在manifest中注册该activity,然后用显示意图或者隐式意图启动都可以
    注册
    <activity android:name = ".Player">
    跳转
    Intent intent = new Intent(this,Player.class);
    startActivity(intent);
      

  2.   

    public static void open(Activity a, Class<? extends Activity> b,
    boolean finishSelf) {
    if (b == a.getClass())
    return;
    Intent intent = new Intent();
    intent.setClass(a, b);
    a.startActivity(intent);
    if (finishSelf) {
    a.finish();
    a.overridePendingTransition(0, 0);
    }
    }把要要跳转的Activity先去注册下,然后调用这个方法!!!
      

  3.   

    surfaceView 是画布,不知道,能不能把Activity.画在里面,帮你顶,顶。
      

  4.   

    两种方法:一是xml里定义,事件发生进行跳转
    二是动态生成跳转
    这是跳转,你的mainActivity会触发onPause事件
      

  5.   

    我在surfaceView自定义myDraw方法,switch case里。
    并且注册了activity,运行后,相关组件出现了一会儿,然后就黑屏了,Logcat显示timeout,疑惑在这里,是什么问题呢?
    public void myDraw() {
    try {
    canvas = sfh.lockCanvas();
    if (canvas != null) {
    canvas.drawColor(Color.WHITE);
    //绘图函数根据游戏状态不同进行不同绘制
    switch (gameState) {
    case GAME_MENU:
    //菜单的绘图函数
    gameMenu.draw(canvas, paint);
    break;
    case GAMEING:
                                     Intent intent = new Intent();
                                     intent.setClass(MainActivity.this,client.class);
                                     MainActivity.startActivity(intent);
    }
    }
    } catch (Exception e) {
    // TODO: handle exception
    } finally {
    if (canvas != null)
    sfh.unlockCanvasAndPost(canvas);
    }
    }
    我的clientActivity代码为:
    package com.socket;import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;public class GuessClientActivity extends Activity implements OnClickListener {

    private Button btn_ok, btn_help;
    private EditText edit;
    private TextView tv;
    private Socket socket;
    private final String ADDRESS = "10.0.2.2";
    private final int PORT = 8888; @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn_ok = (Button) findViewById(R.id.btn_send);
    btn_help = (Button) findViewById(R.id.btn_help);

    tv = (TextView) findViewById(R.id.tv1);
    edit = (EditText) findViewById(R.id.et1);

    btn_ok.setOnClickListener(this);
    btn_ok.setTag(1);
    btn_help.setOnClickListener(this);
    btn_help.setTag(2);
    } public void onClick(View v) {
    // TODO Auto-generated method stub
    int tag = (Integer) v.getTag(); DataInputStream dis = null;
    DataOutputStream dos = null; switch (tag) {

    case 1:
    try {
    socket = new Socket(ADDRESS, PORT);
    dis = new DataInputStream(socket.getInputStream());
    dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(edit.getText().toString()); String temp = "\n\nAndroid";
    temp += edit.getText().toString();
    temp += "\n\n";
    temp += "Server";
    temp += dis.readUTF();
    tv.setText(temp);
    dos.flush();
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    break; case 2:
    Toast.makeText(this, "testing",
    Toast.LENGTH_LONG).show();
    break;
    }
    }
    }这是自定义的名为Player的Activity,不是播放器。
      

  6.   


    import com.sopy.AudioRender;
    import com.sopy.VideoRender;import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.RelativeLayout;
    import android.widget.TextView;public class PlayerView extends Activity
    {
    public static final String TAG = "PlayerView";
    public static final String BUNDDLE_WIDTH  = "width";
    public static final String BUNDDLE_HEIGHT = "height";
    public static final String BUNDDLE_USER   = "user";

    public static final int MENU_FULL_SCREEN = Menu.FIRST;
    public static final int MENU_ORIGINAL_SCREEN = Menu.FIRST + 1;
    public static final int MENU_EXIT = Menu.FIRST + 2;

    int mUserID = 0;
    VideoRender mVideoRender = null;
    AudioRender mAudioRender = null;
    NetworkService mNetworkService = null;

    TextView mInfoTextView = null;
    String mStringInfo = "Live Streaming";

    int mScreenWidth = 0;
    int mScreenHeight = 0;

    @Override
        public void onCreate(Bundle savedInstanceState) 
        {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.main);
            
            DisplayMetrics dm = new DisplayMetrics();
            dm = getApplicationContext().getApplicationContext().getResources().getDisplayMetrics();
            mScreenWidth = dm.widthPixels;
            mScreenHeight = dm.heightPixels;
            Log.e("Sreen", String.format("%d * %d", mScreenWidth, mScreenHeight));
            
            mNetworkService = ((AppMain)getApplication()).mNetworkService;
            if(mNetworkService != null)
            {
             mNetworkService.mPlayer = PlayerView.this;
            }
            
            Bundle bundle = getIntent().getExtras(); 
            mStringInfo = bundle.getString(PlayerView.TAG);
            int width = bundle.getInt(PlayerView.BUNDDLE_WIDTH);
            int height = bundle.getInt(PlayerView.BUNDDLE_HEIGHT);
            mUserID = bundle.getInt(PlayerView.BUNDDLE_USER);
            
            //mInfoTextView = (TextView)findViewById(R.id.player_info);
            //mInfoTextView.setText(mStringInfo);
            
            RelativeLayout parent = (RelativeLayout)findViewById(R.id.main_layout);
            RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams(
             ViewGroup.LayoutParams.FILL_PARENT, 
             ViewGroup.LayoutParams.FILL_PARENT);
            mAudioRender = new AudioRender();
            
            mVideoRender = new VideoRender(getApplication().getApplicationContext());
            parent.addView(mVideoRender, layoutParam);
            addUserIn(mUserID, width, height);
        }

    public void addUserIn(int userID, int videoWidth, int videoHeight)
    {
    //setUserOut();
    mVideoRender.start(videoWidth, videoHeight, mScreenWidth, mScreenHeight);
    mAudioRender.start();
    }

    public void setUserOut()
    {
    if(mUserID > 0)
    {
    mUserID = 0;
    mVideoRender.stop();
    mAudioRender.stop();
    }
    }

    public void release()
    {
    mNetworkService.mPlayer = null;
    setUserOut();
    this.finish();
    }

    public void addAudioData(byte[] data, int offset, int len)
    {
    if(mUserID <= 0) return;
    mAudioRender.addAudioData(data, offset, len);
    }

    public void addVideoData(byte[]data, int offset, int length, int frameID, int totalPacket, int dataOffset)
    {
    if(mUserID <= 0) return;
    mVideoRender.addVideoData(data, offset, length, frameID, totalPacket, dataOffset);
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
    {
    mNetworkService.sendStopMediaCmd(mUserID);
             release();
    return true;
    }
    return super.onKeyDown(keyCode, event) ;
    }


    @Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {
            super.onCreateOptionsMenu(menu);   
            menu.add(0, MENU_FULL_SCREEN, 0, "全屏观看"); 
            menu.add(0, MENU_ORIGINAL_SCREEN, 1, "原始大小"); 
            menu.add(0, MENU_EXIT, 2, "关闭");   
            return true;
        }
        
        @Override
        public boolean onOptionsItemSelected(MenuItem item) 
        {
            switch (item.getItemId())
            {     
            case MENU_FULL_SCREEN:
            {
             if(mVideoRender != null)
             {
             mVideoRender.fullScreen(true);
             }
             break;
            }
            
            case MENU_ORIGINAL_SCREEN:
            {
             if(mVideoRender != null)
             {
             mVideoRender.fullScreen(false);
             }
             break;
            }
            
            case MENU_EXIT:
            {
             mNetworkService.sendStopMediaCmd(mUserID);
             release();
                return true;
            }
            
        default: break;
            }
            return super.onOptionsItemSelected(item);
        }
    }