我在我的應用程序中使用android的screenrecord api。在三星設備上的android應用程序內調用screenrecord不起作用
爲此我已看過一些好的postings
在一個根深蒂固的Nexus 5(搭載Android 5.1)下面的代碼工作沒有任何問題。這意味着屏幕記錄被觸發並且視頻被成功保存到SD卡。
在根深蒂固的三星S6 Edge(Android 5.0.2)上,代碼將在第一次調用readLine()時停住。 mp4文件被創建並且可以在SD卡上找到,但是它是空的。
權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
這裏我的代碼:
try {
Process process = Runtime.getRuntime().exec("su");
OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();
stdin.write(("/system/bin/screenrecord --time-limit 10 /sdcard/recording.mp4\n").getBytes());
stdin.write("exit\n".getBytes());
stdin.flush(); //flush stream
stdin.close(); //close stream
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while ((line = br.readLine()) != null) {
Log.i("Response: ", line);
mResults.append(line);
}
br.close();
br = new BufferedReader(new InputStreamReader(stderr));
while ((line = br.readLine()) != null) {
Log.e("Error: ", line);
mErrors.append(line);
}
br.close();
} catch(IOException ioe) {
Log.e(TAG, "IOException: " + ioe.toString());
}
於是我在網上搜索,發現這可能是問題的存在只是沒有被讀取。我在shell命令中加入了「& & echo done」,但仍然沒有改變。
我查了日誌幾次,我發現了兩行KNOX它:
I/libpersona:KNOX_SDCARD爲10202
I/libpersona選中此:KNOX_SDCARD不是一個人物
我想也許KNOX阻止我的應用程序寫入SD卡。所以我從設備上刪除了KNOX,但同樣的問題仍然存在。
我需要讓這個代碼在這個特定的三星設備上運行。 希望你們中的一些人有一個想法如何讓代碼運行。
謝謝丹尼爾