我正在android中创建一个视频播放器。在代码的 android 端,我有一个用于播放/暂停状态的切换按钮。如果 plafFlag=0,则需要暂停视频(playFlag 是 java 部分代码中的变量)。
在代码的本机端,我试图在每次帧显示到屏幕上之前访问这个 playFlag 的值。
下面是我的java部分代码:
public class myPlayer extends Activity {
public int playFlag;
.
.
.
.
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
final ToggleButton playFlagBtn=(ToggleButton) findViewById(R.id.toggleButton1);
playFlagBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(playFlagBtn.isChecked()){
playFlag=0;
}
else{
playFlag=1;
}
}
});
从这个OnCreate函数本身,我调用了我试图访问playFlag变量的本机代码。
下面是我用来访问playFlag变量的代码片段:
jclass cls = (*env)->FindClass(env,"com/example/my_decoder/myPlayer"); __android_log_print(ANDROID_LOG_DEBUG,"MYAPP","reference to class obatined",NULL);
jfieldID fidInt=(*env)->GetFieldID(env,cls,"playFlag","I");
__android_log_print(ANDROID_LOG_DEBUG,"MYAPP","fid obtained",NULL);
int Flag=0;
__android_log_print(ANDROID_LOG_DEBUG,"MYAPP","Before fetching flag value",NULL);
playFlag=(*env)->GetIntField(env,jobj,fidInt);
__android_log_print(ANDROID_LOG_DEBUG,"MYAPP","Initial value of playflag=%d",playFlag);
上面的本机代码片段没有给出错误。该值已获取,但似乎是一些垃圾值。
在 logcat 中,我得到如下输出:
03-08 11:21:32.627: D/MYAPP(31220): Initial value of playflag=1085053248
这里的主要目的是如果 fetched 标志的值为 0,则暂停解码过程,否则继续解码帧并将其渲染到屏幕上。因此,对我来说,从代码的 java 部分获取正确的标志值非常重要。
谁能解释一下我哪里出错了。或者,如果有其他方法可以做到这一点。
等待一些答复。提前致谢。