2015-06-22 51 views
1

我在我的應用程序中使用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,但同樣的問題仍然存在。

我需要讓這個代碼在這個特定的三星設備上運行。 希望你們中的一些人有一個想法如何讓代碼運行。

謝謝丹尼爾

回答

0

我還沒有找到所述的特定問題的解決方案。 但我偶然發現了另一個幫助我實現目標並記錄Android設備屏幕的API。

MediaRecorderVirtualDisplay的幫助下,我能夠將屏幕捕獲到一個mp4文件到SD卡上。

相關問題