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

ここでの主な目的は、フェッチされたフラグの値が 0 の場合にデコード プロセスを一時停止することです。それ以外の場合は、フレームのデコードと画面へのレンダリングを続行します。したがって、私にとっては、コードの Java 部分からフラグの正しい値を取得することが非常に重要です。

誰が私が間違っているのか説明してもらえますか。または、それを行う別の方法がある場合。

いくつかの返信を待っています。前もって感謝します。

4

0 に答える 0