无法使用android应用程序通过JNI写入sys/class/uwb/scan文件 定义扫描文件/sys/class/uwb\u rc/uwb0/SCAN
我的目标是在android中像在无法使用android应用程序通过JNI写入sys/class/uwb/scan文件 定义扫描文件/sys/class/uwb\u rc/uwb0/SCAN,android,java-native-interface,android-ndk,android-manifest,Android,Java Native Interface,Android Ndk,Android Manifest,我的目标是在android中像在 " echo 9 0 > /sys/class/uwb_rc/uwb0/scan " 我想使用android应用程序和文件操作与JNI集成来实现这一点 我的代码如下所示:- package com.samsung.w; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import andro
" echo 9 0 > /sys/class/uwb_rc/uwb0/scan "
我想使用android应用程序和文件操作与JNI集成来实现这一点
我的代码如下所示:-
package com.samsung.w;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class write extends Activity {
private static final String TAG = "test";
TextView tv_status;
/** Called when the activity is first created. */
private Object myClickHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "entered after main and waiting ...");
getAccessPerm("/sys/class/uwb_rc/uwb0/scan");
}
private void getAccessPerm(String path)
{
try {
String command = String.format("echo \"chmod 777 %s\" | su\nexit\n", path);
Process sh_process = Runtime.getRuntime().exec("sh");
OutputStream writer = sh_process.getOutputStream();
writer.write(command.getBytes("ASCII"));
BufferedReader stdError = new BufferedReader(new InputStreamReader(
sh_process.getErrorStream()));
String err_line = null;
if((err_line = stdError.readLine()) != null) {
Log.e(TAG, "getAccessPerm: chmod cmd failed");
System.out.println(err_line);
while ((err_line = stdError.readLine()) != null) {
System.out.println(err_line);
}
}
}
catch (Exception e) {
Log.e(TAG, "getAccessPerm: exception");
e.printStackTrace();
}
}
public void myClickHandler(View view) {
switch (view.getId()) {
case R.id.scan_button:
TextView textview = (TextView)findViewById(R.id.tv_title);
textview.setText(scaninit());
break;
}
}
public native String scaninit();
static {
System.loadLibrary("write");
}
}
相应的JNI文件是
jstring Java_com_samsung_w_write_scaninit(JNIEnv* env, jobject thiz) {
FILE* file = fopen("/sys/class/uwb_rc/uwb0/scan", "rw");
char *mystring[20];
if (file != NULL) {
fputs("9 0", file);
fgets(mystring, 4, file);
fclose(file);
return (*env)->NewStringUTF(env, mystring);
}
return (*env)->NewStringUTF(env, "file opening failed!");
}
Android清单文件是这样的
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.samsung.w"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> **
<uses-permission android:name="android.permission.FACTORY_TEST" /> **
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".write"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
adb外壳中typin的结果
#echo 9 0 > | cat sys/class/uwb_rc/uwb0/scan
9 0
但是当我使用android应用程序时,我看不到这种变化
#cat /sys/class/uwb_rc/uwb0/scan
3 0 (default value on booting)
请有人帮帮我吧e能够解决这个问题,多亏了布山的帮助 问题在于必须写入权限的内核源代码设备属性 作为 设备属性扫描,0777,超宽带rc扫描显示,超宽带rc扫描存储 而不是 设备属性扫描、S|u IRUGO|S|u IWUSR、uwb|u rc|u扫描|u显示、uwb|u rc|u扫描|u存储 然后在C代码中,fopen应处于r+模式,如中所示 FILE*FILE=fopen/sys/class/uwb_rc/uwb0/scan,r+ 这个论坛太棒了:
#cat /sys/class/uwb_rc/uwb0/scan
3 0 (default value on booting)