2012-04-05 3 views
0

APIDemo의 MediaPlayer를 사용하여 라이브 배경 화면에서 a.m4v 비디오를 재생하고 싶습니다. 다음 코드를 사용하여 MediaPlayer 활동에서 올바르게 작동합니다.Android 서비스에서 파일을 읽지 못했습니다.

 AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.a); 
      mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 

코드를 LivWallpaperService에 넣으면 실패합니다. 파일 허가로 인한 것 같아요.

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) 

따라서 임시 파일에 파일을 복사하려고하지만 여전히 오류가 발생합니다. 내가 AssetFileDescriptor에서 읽을 수없는 이유

   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) 

아무도 아는 사람?

왜 내가 패키지 안에 만든 파일을 읽을 수 없습니까?

답변

1

Android /asset은 응용 프로그램 자체에서만 액세스 할 수 있으므로 읽을 수 없습니다. 다른 응용 프로그램은 응용 프로그램의/asset 디렉토리 안의 자원에 액세스 할 수 없습니다.

internal storage 또는 external storage으로 복사하여 사용하는 것이 좋습니다.

/temp 디렉토리에있는 파일을 확인하면 WORLD_READABLE 권한이 있습니다.

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE); 
fos.write(string.getBytes()); 
fos.close(); 
+0

나는 여전히 같은 오류가 발생했습니다. 코드를 액티비티와 WallpaperService에서 실행하는 것만 다르다. – user1297295

관련 문제