구글링해서 유투브 동영상에서 설명하는 코드를 보고 타이핑하여 기능이 제대로 동작되는지 확인하고 적어둔다.
가장 간단하게 서버에 있는 음악파일을 받아서 스트리밍으로 재생하는 것만 되는 코드라고 보면 된다.
테스트 환경
- Android Studio 3.3
앱 build.gradle
apply plugin: 'com.android.application'
android { compileSdkVersion 26
defaultConfig { applicationId "com.tistory.link2me.audiostreamingplayer" minSdkVersion 16 targetSdkVersion 26 versionCode 1 versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
}
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' }
|
AndroidManifest.xml 파일에는
<uses-permission android:name="android.permission.INTERNET" />
만 추가했다.
MainActivity.java
import android.app.ProgressDialog; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button;
import java.io.IOException;
public class MainActivity extends AppCompatActivity { private Button btn; private boolean playPause; private MediaPlayer mediaPlayer; private ProgressDialog progressDialog; private boolean initalStage = true; String url = Value.IPADDRESS + "/kim_01.wav"; // 서버 음악파일 경로
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); progressDialog = new ProgressDialog(this); btn = (Button) findViewById(R.id.audioStreamBtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(!playPause){ btn.setText("Pause Streaming"); if(initalStage){ new Player().execute(url); } else { if(!mediaPlayer.isPlaying()){ mediaPlayer.start(); } } playPause = true; } else { btn.setText("Launch Streaming"); if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); } playPause = false; } } });
}
@Override protected void onPause() { super.onPause(); if(mediaPlayer != null){ mediaPlayer.reset(); mediaPlayer.release(); mediaPlayer = null; } }
class Player extends AsyncTask<String, Void, Boolean>{
@Override protected void onPreExecute() { super.onPreExecute(); progressDialog.setMessage("Buffering..."); progressDialog.show(); }
@Override protected Boolean doInBackground(String... strings) { Boolean prepared = false;
try { mediaPlayer.setDataSource(strings[0]); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { initalStage = true; playPause = false; btn.setText("Launch Streaming"); mediaPlayer.stop(); mediaPlayer.reset(); } });
mediaPlayer.prepare(); prepared = true; } catch (IOException e) { Log.e("MyAudioStreamingApp",e.getMessage()); prepared = false; e.printStackTrace(); } return prepared; }
@Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if(progressDialog.isShowing()){ progressDialog.cancel(); }
mediaPlayer.start(); initalStage = false; } } }
|
이 기본적인 걸 가지고 코드에 살이 붙이는 작업을 진행할 예정이다.