RT
机子里没有 sd卡 ,就想在 程序所在路径(类似“/data/data/com.example.XXXXX/files”)里面 创建 和 播放 amr 文件,但是遇到问题...我在 “/data/data/com.example.XXXXX/files” 里面 创建 和 写 amr 文件都可以 ,但是 播放的时候却报错 。用的是 MediaPlayer ,在 setDataSource 或 prepare 时 catch 到错误 “prepare failed.:status=0x1” ,查了貌似是权限不够...网上看了下,提权的方式,测试没成功... 有谁提供点 资料、连接 等等??
或者,有哪个目录是可以直接使用的 ??即不提权就可以 读、写、创建、删除、播放 的 ???
 
请指教 ,感谢~~~

解决方案 »

  1.   

    报的什么错? 楼主贴出错误来这种情况我猜测可能是AndroidManifest里面需要声明<uses-permission >相应的读取media的权限吧?
      

  2.   


    <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    除了 这个,还要啥不?
      

  3.   


    程序要读写文件,除了添加    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    外,还要注意你想读写的目录,android系统里并不是有了读写权限后就能操作所有目录的。
    如果有sd卡,添加权限后可以直接读写文件。
    如果没有sd卡,可以获取本程序私有的缓存目录,这个目录是你可以随便操作的。比如目录
    Android/data/com.example/cache ,
    在没有sd卡情况下,可以通过
    context.getCacheDir().getPath()  来获取你程序的私有缓存目录
      

  4.   


    程序要读写文件,除了添加    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    外,还要注意你想读写的目录,android系统里并不是有了读写权限后就能操作所有目录的。
    如果有sd卡,添加权限后可以直接读写文件。
    如果没有sd卡,可以获取本程序私有的缓存目录,这个目录是你可以随便操作的。比如目录
    Android/data/com.example/cache ,
    在没有sd卡情况下,可以通过
    context.getCacheDir().getPath()  来获取你程序的私有缓存目录
    OK,十分感谢,试试去
      

  5.   


    context 是 getApplicationContext() 取得的不?
    貌似,也不行啊... 在虚拟机里面是 OK 的。
      

  6.   


    context 是 getApplicationContext() 取得的不?
    貌似,也不行啊... 在虚拟机里面是 OK 的。是这样获取的呀。如果你获取到的是null,那试试在某个Activity的onCreate函数里直接这样获取:
    this.getCacheDir().getPath()你说的不行,是哪个步骤出错了? 你把获取到的缓存路径打印出来看看实际有没有这个路径。
      

  7.   


    context 是 getApplicationContext() 取得的不?
    貌似,也不行啊... 在虚拟机里面是 OK 的。或者把你的日志贴出来,这样说太笼统了,无法帮你分析。
      

  8.   

    人家是动态创建,assets有神马用?
      

  9.   

    感谢各位,现在测试,TandyT 说的是对的,类似“Android/data/com.example/cache”目录是可以的,我楼顶说的“/data/data/com.example.XXXXX/files” 也是可以的。检查出来是 我注释的时候没留心,setDataSource 没注释掉,下面写新代码时又 setDataSource 了一次,于是产生了错误...