2017-05-01 22 views
1

firebase storage gs://fir-b9532.appspot.com/songs/song1.mp3からmp3ファイルをダウンロードし、それをAndroidアプリケーションに再生する必要があります。 デバイスのメモリにmp3ファイルを一時的に保存し、メディアプレーヤーで再生してから新しい曲を持っていきたいです。firebaseストレージからメモリに.mp3ファイルをダウンロードして再生する

次の簡単なコードを記述したFirebaseマニュアルに従っていますが、動作していないようです。どんなアイデアがうまくいかないの?

package com.example.andreaskonstantakos.firebase; 

import android.media.MediaPlayer; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import com.google.android.gms.tasks.OnFailureListener; 
import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageReference; 


public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FirebaseStorage storage = FirebaseStorage.getInstance(); 

     StorageReference storageRef = storage.getReference(); 
     StorageReference songsRef = storageRef.child("songs"); 
     StorageReference song1Ref = storageRef.child("songs/song1.mp3"); 

     final long ONE_MEGABYTE = 1024 * 1024; 
     song1Ref.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() { 
      @Override 
      public void onSuccess(byte[] bytes) { 
       // Data for "songs/song1.mp3" is returns, use this as needed 
       MediaPlayer md = MediaPlayer.create(MainActivity.this,R.id.bytes); 
       md.setLooping(false); 
       md.start(); 
      } 
    }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle any errors 
     } 
    }); 

} 


} 
+0

excecutionがONFAILURE方法で続行、するonSuccess –

答えて

2

オーディオファイルをダウンロードして一時的にメモリに保存する代わりに、Firebaseストレージが提供する完全なURL(「https://firebasestorage.googleapis.com/v0/b/fir-b9532.appspot.com/o/songs%2Fsong1.mp3?alt=media&token=a4424b28-93c3-4a0c-a6b9-9136dcf63335」)からの曲をライブストリーミングすることで別の解決策を見つけました。

私はちょうどこのように私のMediaPlayerをロードします。問題はexcecutionがONSUCCESS方法ではなく、常にONFAILUREに行くことはありませんということですその前に

try { 
     MediaPlayer player = new MediaPlayer(); 
     player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     player.setDataSource("https://firebasestorage.googleapis.com/v0/b/fir-b9532.appspot.com/o/songs%2Fsong1.mp3?alt=media&token=a4424b28-93c3-4a0c-a6b9-9136dcf63335"); 
     player.prepare(); 
     player.start(); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
4

この行は、あなたが期待するものすべてにやっていません。

MediaPlayer md = MediaPlayer.create(MainActivity.this,R.id.bytes); 

R.id.bytesbytesと呼ばれるID資源です。整数を含みます。成功リスナーで受け取っているバイト配列ではありません。

MediaPlayerは、バイト配列に存在するメディアを再生できないことにも注意してください。代わりに、バイトの配列をファイルに保存し、MediaPlayerでそのファイルを指してcreate(Context context, Uri uri)で再生する必要があります。完了したら、おそらくファイルを削除する必要があります。

+0

に行くことはありません。私はその2つの方法でテキストビューを使用して見ることができます。 –

+0

あなたの質問を編集して、何が起こっているのかを正確に伝えてください。単に「仕事していない」と言っても、実際には十分に言っているわけではありません。障害リスナーに渡された例外を出力し、その内容を確認します。 –

関連する問題