Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用android应用程序通过JNI写入sys/class/uwb/scan文件 定义扫描文件/sys/class/uwb\u rc/uwb0/SCAN_Android_Java Native Interface_Android Ndk_Android Manifest - Fatal编程技术网

无法使用android应用程序通过JNI写入sys/class/uwb/scan文件 定义扫描文件/sys/class/uwb\u rc/uwb0/SCAN

无法使用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

我的目标是在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 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)