您的位置:首页 > 移动开发

app访问文件

2016-07-13 15:52 295 查看
app访问文件,写内容到文件,驱动 DEVICE_ATTR 处理内容

FileOutputStream

package com.example.administrator.otgselect;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.view.View;

import java.io.File;
import java.io.FileOutputStream;

public class MainActivity extends AppCompatActivity {

private static final boolean DEBUG = true;
private static final String TAG = "OTG_GPIO";

private static final String FL_CLASS_PATH = "sys/devices/soc.0/msmgpio_ctrl.70/";
private FileOutputStream fos;
// public native void OtgDisable();//ioctl
// public native void OtgEnable();

@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "lmy onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button on = (Button) findViewById(R.id.otg_on);
on.setOnClickListener(mOnClickListener);
Button off = (Button) findViewById(R.id.otg_off);
off.setOnClickListener(mOnClickListener);
if (DEBUG) Log.e(TAG, "start listen");
}

private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(final View v) {
switch (v.getId()) {
case R.id.otg_on:
try {
if (DEBUG) Log.e(TAG, "otg_on");
fos = new FileOutputStream(new File(FL_CLASS_PATH,"otg_gpio_ctrl"));
fos.write("enable".getBytes());
} catch(Exception e){
if (DEBUG) Log.e(TAG, "on exception!!!");
e.printStackTrace();
}finally{
try{
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
break;
case R.id.otg_off:
try {
if (DEBUG) Log.e(TAG, "otg off");
fos = new FileOutputStream(new File(FL_CLASS_PATH,"otg_gpio_ctrl"));
fos.write("disable".getBytes());
} catch(Exception e){
if (DEBUG) Log.e(TAG, "off exception!!!");
e.printStackTrace();
}finally{
try{
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
break;
}
}
};
}


运行起来肯定是没权限的,会Exception, 打log, permission Error。

1、被访问的文件在sys,权限是rwx-r-r,  非root写不了,所以,chmod 766

2、avc denied, (1) setenforce 0 (2) 添加policy

3、相对于ioctl 访问文件,直接读写限制太多,最好用jni ioctl

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.otgselect.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
android:id="@+id/otg_on"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginTop="80dp"
android:layout_centerHorizontal="true"
android:text="OTG ON"/>
<Button
android:id="@+id/otg_off"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginTop="200dp"
android:layout_centerHorizontal="true"
android:text="OTG OFF"/>
</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息