我有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));
}
请问要如何在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));
}
注册
<activity android:name = ".Player">
跳转
Intent intent = new Intent(this,Player.class);
startActivity(intent);
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先去注册下,然后调用这个方法!!!
二是动态生成跳转
这是跳转,你的mainActivity会触发onPause事件
并且注册了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,不是播放器。
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);
}
}