1

filename.dat我的应用程序在 /sdcard 文件夹中写入了一个名为的文件
我可以从平板电脑中的 adb 中删除该文件,使用命令 adb shell rm /sdcard/filename.dat
我将此平板电脑仅用于开发而不是其他任何东西,所以我安装的应用程序很少,而且这些也是特定于我需要开发的东西,例如文件资源管理器
我在 LG Optimus LTE 手机中尝试了同样的东西,它正在积极使用,因此安装了许多其他应用程序,包括个人日常工作所需的应用程序
当我尝试相同的时候命令,
adb shell rm /sdcard/filename.dat
在 LG 手机中,它拒绝这样做
rm failed for /sdcard/filename.dat, Permission denied
为什么会这样?

更重要的是,在我正在测试的程序中,它在 Nexus 7 中一直运行良好,但是当我尝试在手机上运行它时,它第一次运行良好,但当我第二次这样做时,一个程序中的变量开始获取 NaN 值(我已经追踪到是由于其中一行发生了 Infinity/Infinity 除法),然后每次我再次执行它时,它都会显示这些 NaN 值。我猜这个程序对于不熟悉它的人来说太长了,无法进行故障排除,但它使用 AudioTrack 和 AudioRecord 类来获取声音输入,对其执行一些 FFT 和 DSP 操作,然后播放它。

我真正需要知道的是,平板电脑和手机之间有什么不同,可能会导致这样的问题,以及我可能需要考虑的其他事项是什么?

我将 AudioRecord 和 AudioTrack 初始化为

int min = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
record = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, min);
int maxJitter = AudioTrack.getMinBufferSize(SAMPLE_FREQUENCY, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
track = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION, 16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, maxJitter, AudioTrack.MODE_STREAM);  

我认为这可能与这个特定的程序有关,因为使用 MODE_IN_COMMUNICATION 以外的东西,例如 MODE_VOICE_CALL,似乎编译得很好,但会产生类似的问题,即使在 Nexus 7 中也是如此。

4

1 回答 1

0

您可以尝试System.getenv("EXTERNAL_STORAGE")获取外部存储目录而不是使用/sdcard/. 根据我的经验,在大多数情况下都是一样的。但这应该每次都为您提供正确的输出目录。

于 2013-10-18T02:45:29.967 回答