mp4prasser异常java.io.IOException:打开失败:EACCES(权限被拒绝)

时间:2016-08-05 11:18:39

标签: java android android-studio mp4parser

当我运行这个程序时(我使用mp4prasser库)我收到一个例外:

java.io.IOException: open failed:EACCES (Permission denied)

但在Manifest中我设置了权限:

<uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

这是代码(API 17):

public class MainActivity extends AppCompatActivity {
Button mButton;
String Path;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mButton=(Button)findViewById(R.id.button);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                Path= Environment.getExternalStorageDirectory().toString()
                +File.separator+"AAAATAG"+File.separator+"abcde.mp4";
                startTrim(Path,Environment.getExternalStorageDirectory().toString(),50000,100000);
            } catch (IOException e) {
                Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    });



}

查看func startTrim()的代码: http://pastebin.com/LDjn3Y7f

2 个答案:

答案 0 :(得分:0)

请检查您是否在正确的位置放置了用户权限?实际上我曾犯过这个错误并花了很长时间才解决。

/* nativeintarray.c */
#include <stdio.h>
#include <assert.h>

#include <caml/config.h>
#include <caml/memory.h>
#include <caml/bigarray.h>

CAMLprim value make_array(value unit) {
  CAMLparam1(unit);
  intnat* a = calloc (1, sizeof(intnat));
  a[0] = -1;
  /* Create a C-style bigarray, yes it is a memory leak */
  CAMLreturn(caml_ba_alloc_dims(CAML_BA_NATIVE_INT | CAML_BA_C_LAYOUT, 1, a, 1));
}

答案 1 :(得分:0)

您应该查看logcat输出以进行验证,但很可能是因为startTrim()的这一行(请参阅您的pastebin):

file.getParentFile().mkdirs();

这是尝试创建目标目录,传入的目录名称(Environment.getExternalStorageDirectory())的父目录加上您生成的文件名。没有添加文件分隔符。由于该父目录是系统控制的目录(并且已经存在),因此您无权创建它。稍后在genVideoUsingMp4Parser()中进行相同的调用。

logcat输出中的回溯应指向正确的调用,导致EACCESS错误。