Ich möchte ein Video a.m4v in Live Wallpaper mit dem MediaPlayer von APIDemo spielen. Ich habe den folgenden Code verwendet und funktioniert gut in MediaPlayer-Aktivität.Fehler beim Lesen der Datei im Android Service
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.a);
mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
Es schlägt fehl, wenn ich den Code in LivWallpaperService legte. Ich denke, es ist wegen der Erlaubnis.
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)
Daher versuche ich, die Datei in eine temporäre Datei kopieren, aber immer noch den Fehler.
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)
Weiß jemand, warum ich nicht von einem AssetFileDescriptor lesen kann?
und warum kann ich keine Datei lesen, die ich im Paket erstellt habe?
Ich habe versucht und immer noch den gleichen Fehler. es ist nur "anders" zwischen dem Ausführen des Codes in Aktivität und WallpaperService. – user1297295