读书人

怎么在启动另外一个Activity

发布时间: 2012-06-21 13:42:41 作者: rapoo

如何在启动另外一个Activity?
我有1个MainActivity,1个SurfaceView,1个 Player类继承activity。


请问要如何在sufaceView里启动并且执行该继承了activity的Player类呢?

我的主要 MainActivity 代码:

Java code
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));    }


[解决办法]
首先在manifest中注册该activity,然后用显示意图或者隐式意图启动都可以
注册
<activity android:name = ".Player">
跳转
Intent intent = new Intent(this,Player.class);
startActivity(intent);
[解决办法]
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先去注册下,然后调用这个方法!!!
[解决办法]
surfaceView 是画布,不知道,能不能把Activity.画在里面,帮你顶,顶。
[解决办法]
这个不知道,,帮你顶。。
[解决办法]
两种方法:一是xml里定义,事件发生进行跳转
二是动态生成跳转
这是跳转,你的mainActivity会触发onPause事件
[解决办法]
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);
}
}

读书人网 >Android

热点推荐