jniとjavaの間でbytearrayを受け渡しする
java 側から jni 側へ bytearray を渡し、jni 側で bytearray を返す。
java側の宣言は以下の通りです。
public native byte[] Bluetooth_NativeProcessData_Send(byte[] data,int len);
public native byte[] Bluetooth_NativeProcessData_Receive(byte[] data,int len);
以下は、jni側の宣言です。
静的なJNINativeMethod gMethods[] = {。
<未定義
{"Bluetooth_NativeProcessData_Send","([BI)[B",(void*)Native_ProcessData_Send},
{"Bluetooth_NativeProcessData_Receive","([BI)[B",(void*)Native_ProcessData_Receive},
};
jni側での実装。
jbyte gs_raw_data[256];
jbyte gr_raw_data[256];
JNIEXPORT jbyteArray JNICALL Native_ProcessData_Send(JNIEnv *env, jobject clazz, jbyteArray data,jint len)
{
<未定義
jclass cls;
int i;
cls = env->FindClass(JNIREG_CLASS);
jbyte* bytedata = env->GetByteArrayElements(data, 0);
memset(&gs_raw_data,0,255);
memcpy(&gs_raw_data,bytedata,len) を実行します。
// データを解析する
//以下は、return 's bytearray lensです。
jbyteArray jarrRV =env->NewByteArray(len+1);
env->SetByteArrayRegion(jarrRV, 0,len,gs_raw_data);
jarrRVを返します。
}
JNIEXPORT jbyteArray JNICALL Native_ProcessData_Receive(JNIEnv *env, jobject clazz, jbyteArray data,jint len)
{
<未定義
jclass cls;
int i;
cls = env->FindClass(JNIREG_CLASS);
jbyte* bytedata = env->GetByteArrayElements(data, 0);
memset(&gr_raw_data,0,255);
memcpy(&gr_raw_data,bytedata,len);
// データを解析し、データを処理する
// データを加工してみる
for(i=0;i<len;i++)
{
<未定義
gr_raw_data[i]=bytedata[i]+1;
}
//データを処理した後、処理したデータレンズを返すことができます。
// 以下は、return 's bytearray lensであることに注意してください。
jbyteArray jarrRV =env->NewByteArray(len+1);
env->SetByteArrayRegion(jarrRV, 0,len,gs_raw_data);
jarrRVを返します。
}
//blowはjniを呼び出し、バイト配列をjniに渡してjniから返すjavaです
public void test(t) { <未定義
// テンポラリオブジェクトの作成
int ilength,i;
byte[] retdata;
byte[] out1 = new byte[1024]です。
{ <未定義
out1[0] = (byte) 0X31;
out1[1] = (byte) 0X32;
out1[2] =0x33。
out1[3] =0x34。
out1[4] = 0x35;
}
retdata=Bluetooth_NativeProcessData_Send(out1,5);
{ <未定義
Log.d(TAG,"THE rawdata IS----"+bytesToHex(out1,5));
Log.d(TAG,"THE RETDATA IS---"+bytesToHex(retdata,5)) を実行します。
}
関連
-
アンドロイド アルメアビ アルメアビ-v7a
-
スレッド内にハンドラを作成できない Looper.prepare() を呼び出していないスレッド
-
com.android.ide.common.process.ProcessException が発生する可能性のある原因。aaptの実行に失敗したエラー(解決済み)
-
Android studio java ファイル表示 j burst red
-
60フレーム飛ばした!?アプリケーションがメインスレッドで過剰な作業を行っている可能性があります。
-
Android eclipseが起動できない:選択項目を起動できず、最近起動した項目もない
-
Android 開発の問題点:ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません
-
ライブ画面録画のAndroid実装 (a) ScreenRecorderの簡易解析
-
android ImageViewの割り当て問題 setImageResourceとsetImageBitmap
-
原因:android.content.res.Resources$NotFoundException。文字列リソースID #0x0
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android Studio 3.1.2 新規プロジェクトのエラー AAPT2エラー:詳細はログを確認してください(Gradle 3.1.2)
-
Android Studioの解決策:xxxは囲むクラスではありませんエラー
-
Android O (8.0) デスクトップショートカットを作成する
-
Android マルチメディア MediaPlayerの使用方法詳細
-
Android動的ブロードキャストの追加許可
-
Android Studioの設定 Gradleの概要
-
Android デフォルトのホームアプリケーション(Launcher)起動プロセスのソースコード解析
-
android start activity report android.content.res.Resources$NotFoundException: 文字列リソースID #0x0
-
AndroidManifestの使用機能の設定
-
SQLiteReadOnlyDatabaseException: 読み取り専用のデータベースを書き込もうとした (コード 1032)