1

我正在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 部分获取正确的标志值非常重要。

谁能解释一下我哪里出错了。或者,如果有其他方法可以做到这一点。

等待一些答复。提前致谢。

4

0 回答 0