2015-06-22 53 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卡上。

相关问题