Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Android服务中读取文件_Android_Media Player_Ioexception - Fatal编程技术网

无法在Android服务中读取文件

无法在Android服务中读取文件,android,media-player,ioexception,Android,Media Player,Ioexception,我想使用APIDemo的MediaPlayer在实时壁纸中播放视频a.m4v。 我使用了以下代码,在MediaPlayer活动中工作良好 AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.a); mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());

我想使用APIDemo的MediaPlayer在实时壁纸中播放视频a.m4v。 我使用了以下代码,在MediaPlayer活动中工作良好

       AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.a);
            mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());  
当我将代码投入服务时,它失败了。我认为这是由于文件许可

04-05 12:32:58.598: D/MediaPlayerDemo(5308): onPrepared called
04-05 12:32:58.598: V/MediaPlayerDemo(5308): startVideoPlayback
04-05 12:32:59.153: D/MediaPlayerDemo(5308): player starting
04-05 12:33:00.004: E/MediaPlayer(5308): error (1, -19)
04-05 12:33:00.004: E/MediaPlayer(5308): Error (1,-19)
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE);
fos.write(string.getBytes());
fos.close();
因此,我尝试将该文件复制到临时文件中,但仍然会出现错误

                InputStream is = getResources().openRawResource(R.raw.a);

            File tempfile = File.createTempFile("mediaplayer", "temp",this.getCacheDir());
            String tempfilepath = tempfile.getAbsolutePath();
             FileOutputStream fo = new FileOutputStream(tempfile);
             BufferedOutputStream bis = new BufferedOutputStream(fo);

             int count = 0;
             byte buf[] = new byte[128];
             do {

              int numread = is.read(buf);
              count+=numread;
              if (numread <= 0)
               break;
              bis.write(buf, 0, numread);
             } while (true); 

             Log.d(TAG, "tempfile.length()"+tempfile.length());

             Log.d(TAG, is.toString());


             mMediaPlayer.setDataSource(tempfilepath)


04-05 12:46:36.981: E/MediaPlayerDemo(6000): error: null
04-05 12:46:36.981: E/MediaPlayerDemo(6000): java.lang.IllegalStateException
04-05 12:46:36.981: E/MediaPlayerDemo(6000):    at
android.media.MediaPlayer.setDataSource(Native Method)
InputStream is=getResources().openRawResource(R.raw.a);
File tempfile=File.createTempFile(“mediaplayer”,“temp”,this.getCacheDir());
字符串tempfilepath=tempfile.getAbsolutePath();
FileOutputStream fo=新的FileOutputStream(tempfile);
BufferedOutputStream bis=新的BufferedOutputStream(fo);
整数计数=0;
字节buf[]=新字节[128];
做{
int numread=is.read(buf);
计数+=numread;

如果(numreadAndroid
/asset
只能由应用程序本身访问,因此您不能访问。没有其他应用程序可以访问应用程序的/asset目录中的资源

因此,将其复制到
内部存储器
外部存储器
并使用它是个好主意

只需检查
/temp
目录中的文件是否具有
WORLD\u READABLE
权限

04-05 12:32:58.598: D/MediaPlayerDemo(5308): onPrepared called
04-05 12:32:58.598: V/MediaPlayerDemo(5308): startVideoPlayback
04-05 12:32:59.153: D/MediaPlayerDemo(5308): player starting
04-05 12:33:00.004: E/MediaPlayer(5308): error (1, -19)
04-05 12:33:00.004: E/MediaPlayer(5308): Error (1,-19)
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE);
fos.write(string.getBytes());
fos.close();

我试过了,但还是出现了同样的错误。在“活动”和“服务”中运行代码只是“不同”。