2012-04-05 7 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) 

したがって、ファイルを一時ファイルにコピーしようとしましたが、引き続きエラーが発生しました。

   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) 

なぜ私はAssetFileDescriptorから読み取れないのですか?

なぜパッケージ内に作成したファイルを読み取れないのですか?

答えて

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

関連する問題