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 部分からフラグの正しい値を取得することが非常に重要です。
誰が私が間違っているのか説明してもらえますか。または、それを行う別の方法がある場合。
いくつかの返信を待っています。前もって感謝します。