![]() |
(Android)ネットラジオ受信のための基本機能サンプルプログラム (Android) Internet Streaming Receiver sample program |
目次 |
Androidの標準クラスandroid.media.MediaPlayerを使った、インターネット・ラジオ(ストリーミング)を受信するアプリケーションのサンプルコード。
Google Playで入手できる無料のメディアプレーヤーは、ストリーミング受信に必要無い権限を要求し、個人情報を流出させているのではという懸念から、単純機能のみのアプリケーションを作成してみた。
実行画面例 (左:受信状態、中央:メニュー表示、右:設定画面)
[playlist] Title3=181.FM - Power 181 File3=http://relay.181.fm:8128/ Length3=-1 Title5=181.FM - UK Top 40 File5=http://uplink.duplexfx.com:8070 Length5=-1 Title36=Radio Suisse Classique File36=http://stream.srg-ssr.ch/m/rsc_fr/mp3_128 Length36=-1 Title37=Radio Swiss Pop File37=http://stream.srg-ssr.ch/m/rsp/mp3_128 Length37=-1 Title40=RadioTunes - Café de Paris File40=http://pub2.radiotunes.com/radiotunes_cafedeparis Length40=-1 Title48=RadioTunes - Solo Piano File48=http://pub3.radiotunes.com/radiotunes_solopiano Length48=-1
戻るボタンのタップや、画面回転はActivityが破棄されるため、Destroy関数で受信を強制中止している。バッググラウンドで稼働させるためにはホーム・ボタンをタップする。
PLSファイルに悪意のある文字列を記述されることは想定していない。(チエックしていない)
MeidiaPlayerクラス関数で処理中は画面が固まるのは、スレッドに分離していないから。(このアプリケーションは、単なるサンプルコードのため)
PLSファイルの選択には、別途ファイルエクスプローラなどがインストールされている必要がる。
// ネットラジオの受信開始処理 private void mediaplayer_start(){ Toast.makeText(MainActivity.this, "接続中 ...", Toast.LENGTH_LONG).show(); // スレッドで利用する経過時間表示フラグをプリファレンスから読み込む SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); flag_pref_disp_time = pref.getBoolean("pref_disp_time", false); // 経過時間表示をクリア text_time.setText(""); try{ // メディアプレーヤーの受信処理 media_player.reset(); media_player.setAudioStreamType(AudioManager.STREAM_MUSIC); media_player.setDataSource(array_uri.get(spinner_stations.getSelectedItemPosition())); // setDataSourceの引数形式は "file://mnt/sdcard/test.mp3", "http://example.com/test" media_player.prepare(); media_player.start(); // ボタン表示の更新 button_play.setText("停止"); // テキストの更新 String strDisp = "受信中 ..."; if(media_player.getDuration() > 0) strDisp += String.format("\n曲長 %d 秒", media_player.getDuration()/1000); text.setText(strDisp); // Uri表示テキストの更新 if(pref.getBoolean("pref_disp_uri", false)) text_uri.setText(array_uri.get(spinner_stations.getSelectedItemPosition())); // 経過時刻表示の有効化 elapsed_time = System.currentTimeMillis()/1000L; flag_disp_elapsed_time = true; } catch (Exception e) { Toast.makeText(MainActivity.this, "接続失敗", Toast.LENGTH_LONG).show(); button_play.setText("受信"); text.setText("接続に失敗。次の操作を待機中\n code:"+e.toString()); } }
binディレクトリ内の.apkファイルがインストールパッケージです。
GNU GPL フリーソフトウエア