当我运行这个程序时(我使用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
答案 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
错误。