diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d01c29..1be335a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,7 +26,13 @@
+ android:exported="false" >
+
+
+
+
+
+
diff --git a/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java b/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java
index ccf7ad7..3319aba 100644
--- a/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java
+++ b/app/src/main/java/org/ntlab/amaryllis/client/MainActivity.java
@@ -13,7 +13,10 @@
import android.app.AlarmManager;
import android.app.Notification;
import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Location;
@@ -22,20 +25,29 @@
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.Debug;
+import android.os.IBinder;
+import android.os.RemoteException;
import android.provider.Settings;
+import android.support.v4.media.session.MediaControllerCompat;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
+import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.bottomnavigation.BottomNavigationView;
+import org.ntlab.amaryllis.client.entities.AmaryllisBackgroundService;
import org.ntlab.amaryllis.client.entities.Category;
+import org.ntlab.amaryllis.client.entities.PlayListListener;
+import org.ntlab.amaryllis.client.entities.Voicememo;
import org.ntlab.amaryllis.client.fragment.MapsFragment;
import org.ntlab.amaryllis.client.resources.AccountsRest;
import org.ntlab.amaryllis.client.resources.CategoriesRest;
+import org.ntlab.amaryllis.client.voiceservice.TestVoiceService;
+import org.ntlab.amaryllis.client.voiceservice.VoiceMemo;
import java.util.ArrayList;
import java.util.HashMap;
@@ -57,6 +69,39 @@
ImageButton playbutton;
ImageButton stopbutton;
ImageButton skipbutton;
+ TextView titleView;
+
+ AmaryllisBackgroundService myService;
+ MediaControllerCompat mediaController;
+ ServiceConnection serviceConnection = new ServiceConnection(){
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ myService = ((AmaryllisBackgroundService.MyBinder)service).getService();
+ try {
+ mediaController=new MediaControllerCompat(MainActivity.this,myService.getToken());
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ myService.subscribe(new PlayListListener() {
+ @Override
+ public void onPlayNext(VoiceMemo voicememo) {
+ titleView.setText(voicememo.getTitle());
+ }
+
+ @Override
+ public void onPlayEnd() {
+
+ }
+ });
+ //myService.setMessage("Hello, IBinder!");
+ //startService(serviceIntent);
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ myService = null;
+ }
+ };
int playfrag=0;
int stopfrag=0;
@@ -98,42 +143,41 @@
});
+ //アクティビティとサービスを接続
+ bindService(new Intent(getBaseContext(),AmaryllisBackgroundService.class),serviceConnection, Context.BIND_AUTO_CREATE);
+
//収音関係のボタンの処理
playbutton = (ImageButton)findViewById(R.id.playbutton);
+ playbutton.setEnabled(true);
playbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- playfrag++;
- if((playfrag%2)==0){
- //こっち側がオフ
- }else{
- //こっち側がオン
- }
+
+ mediaController.getTransportControls().play();
}
});
stopbutton = (ImageButton)findViewById(R.id.stopbutton);
stopbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- stopfrag++;
- if((stopfrag%2)==0){
- //こっち側がオフ
- }else{
- //こっち側がオン
- }
+ mediaController.getTransportControls().pause();
}
});
skipbutton = (ImageButton)findViewById(R.id.skipbutton);
skipbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
-
+ mediaController.getTransportControls().skipToNext();
}
});
-
+ titleView=(TextView) findViewById(R.id.textView);
LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
+
+
+
+
}
private void locationStart(){
diff --git a/app/src/main/java/org/ntlab/amaryllis/client/entities/AmaryllisBackgroundService.java b/app/src/main/java/org/ntlab/amaryllis/client/entities/AmaryllisBackgroundService.java
index 7ef7aa6..cdd6fab 100644
--- a/app/src/main/java/org/ntlab/amaryllis/client/entities/AmaryllisBackgroundService.java
+++ b/app/src/main/java/org/ntlab/amaryllis/client/entities/AmaryllisBackgroundService.java
@@ -1,18 +1,39 @@
package org.ntlab.amaryllis.client.entities;
import android.app.IntentService;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.ComponentName;
+import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Binder;
import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaControllerCompat;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
+import android.util.Log;
+import android.view.KeyEvent;
+import org.ntlab.amaryllis.client.R;
import org.ntlab.amaryllis.client.resources.VoicememosRest;
import org.ntlab.amaryllis.client.voiceservice.PlayListManager;
+import org.ntlab.amaryllis.client.voiceservice.TestVoiceService;
import org.ntlab.amaryllis.client.voiceservice.VoiceMemo;
+import org.ntlab.amaryllis.client.voiceservice.VoicememoReceiver;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import androidx.core.app.NotificationCompat;
+import androidx.media.session.MediaButtonReceiver;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -21,26 +42,152 @@
public class AmaryllisBackgroundService extends IntentService implements LocationListener {
+ final String TAG = AmaryllisBackgroundService.class.getSimpleName();//ログ用タグ
+ public static final String ACTION_TOGGLE = "org.ntlab.amaryllis.client.ACTION_TOGGLE";
+ public static final String ACTION_PLAY = "org.ntlab.amaryllis.client.entities.ACTION_PLAY";
+ public static final String ACTION_STOP = "org.ntlab.amaryllis.client.entities.ACTION_STOP";
+ public static final String ACTION_PAUSE = "org.ntlab.amaryllis.client.entities.ACTION_PAUSE";
private ArrayList playListListeners;
private PlayListManager playListManager;
private double longitude,latitude;
private int i=0;
+ final IBinder myBinder=new MyBinder();
+
+ //音声再生に関わるメンバ変数--------
+ MediaPlayer mediaPlayer;
+ AudioManager audioManager;
+ MediaSessionCompat mediaSession;
+ ComponentName sampleReceiver;
+ public enum State{PLAY,STOP,PAUSE};
+ AmaryllisBackgroundService.State mState;
+ VoiceMemo currentVoicememo;//再生中のヴォイスメモ
+ //----------------
+
+ public class MyBinder extends Binder {
+ public AmaryllisBackgroundService getService(){
+ return AmaryllisBackgroundService.this;
+ }
+ }
+
+
public AmaryllisBackgroundService() {
super("AmaryllisBackgroundService");
playListListeners=new ArrayList<>();
-
}
-// ArrayList Lat;
+
@Override
public void onCreate() {
super.onCreate();
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/amaryllis/")
+ .addConverterFactory(JacksonConverterFactory.create())
+ .build();
+ final VoicememosRest voicememosRest=retrofit.create(VoicememosRest.class);
+ playListManager=new PlayListManager();
+ double range=1.0;
+ // Call> call=voicememosRest.getVoicememos(latitude+range,latitude-range,longitude+range,longitude-range);
+ Call> call=voicememosRest.getVoicememos(180.0,-180.0,180.0,-180.0);
+ call.enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ List voicememos = response.body();
+ float distance[] = new float[voicememos.size()];
+ ArrayList t = new ArrayList<>();
+ for(VoiceMemo v:voicememos){
+ double lat=v.getLatitude();
+ double lon=v.getLongitude();
+ Location.distanceBetween(latitude,longitude,lat,lon,distance);
+ if (distance[i] < 10000000.0){
+ //ここにPlayListManagerへ投稿を送る
+ t.add(v);
+ }
+ i++;
+ }
+ playListManager.addVoiceMemos(t);
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+
+ }
+ });
+ {
+
+ mState = State.STOP;
+ sampleReceiver=new ComponentName(this, VoicememoReceiver.class);
+ mediaPlayer=new MediaPlayer();
+ mediaSession=new MediaSessionCompat(getApplicationContext(),TAG);
+ //このMediaSessionが提供する機能を設定
+ mediaSession.setFlags(
+ MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS | //キュー系のコマンドの使用をサポート
+ MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
+ ); //再生、停止、スキップ等のコントロールを提供
+ mediaSession.setCallback(callback);
+
+ }
+
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+
+ }
+
+
+ public void subscribe(PlayListListener playListListener){
+ playListListeners.add(playListListener);
+ }
+ public PlayListManager getPlayListManager(){
+ return playListManager;
+ }
+
+ private void callPlayNext(VoiceMemo voicememo){
+ for(PlayListListener pl:playListListeners)pl.onPlayNext(voicememo);
+ }
+ private void callPlayEnd(){
+ for(PlayListListener pl:playListListeners)pl.onPlayEnd();
+ }
+
+ public MediaSessionCompat.Token getToken(){
+ return mediaSession.getSessionToken();
+ }
+
+ public State getState(){
+ return mState;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ String action = intent.getAction();
+ if(action==null)return START_NOT_STICKY;
+ switch (action){
+ case ACTION_PLAY:
+ callback.onPlay();
+ break;
+ case ACTION_PAUSE:
+ callback.onPause();
+ break;
+ case ACTION_STOP:
+
+ break;
+ }
+
+ // サービス開始 or 既存サービスの再利用
+ return START_NOT_STICKY;
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ longitude=location.getLongitude();
+ latitude=location.getLatitude();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/amaryllis/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
final VoicememosRest voicememosRest=retrofit.create(VoicememosRest.class);
- Call> call=voicememosRest.getVoicememos(145.0,0.0,145.0,0.0);
+ double range=1.0;
+ Call> call=voicememosRest.getVoicememos(latitude+range,latitude-range,longitude+range,longitude-range);
call.enqueue(new Callback>() {
@Override
public void onResponse(Call> call, Response> response) {
@@ -68,34 +215,6 @@
}
@Override
- protected void onHandleIntent(Intent intent) {
-
- }
-
- public void subscribe(PlayListListener playListListener){
- playListListeners.add(playListListener);
- }
- public PlayListManager getPlayListManager(){
- return playListManager;
- }
-
- private void callPlayNext(Voicememo voicememo){
- for(PlayListListener pl:playListListeners)pl.onPlayNext(voicememo);
- }
- private void callPlayEnd(){
- for(PlayListListener pl:playListListeners)pl.onPlayEnd();
- }
-
-
-// ArrayList<> 変数名 = new ArrayList();
-
- @Override
- public void onLocationChanged(Location location) {
- longitude=location.getLongitude();
- latitude=location.getLatitude();
- }
-
- @Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@@ -108,5 +227,281 @@
public void onProviderDisabled(String s) {
}
+ public void clean() {
+ //mState = AmaryllisBackgroundService.State.STOP;
+ mediaPlayer.reset();
+ mediaPlayer.release();
+ mediaPlayer = null;
+ }
+
+ public IBinder onBind(Intent intent){
+ Log.d(TAG,"onBind");
+ return myBinder;
+ }
+
+ //MediaSession用コールバック
+ private MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() {
+
+ //曲のIDから再生する
+ //WearやAutoのブラウジング画面から曲が選択された場合もここが呼ばれる
+ @Override
+ public void onPlayFromMediaId(String mediaId, Bundle extras) {
+ //今回はAssetsフォルダに含まれる音声ファイルを再生
+ //Uriから再生する
+ //DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getApplicationContext(), Util.getUserAgent(getApplicationContext(), "AppName"));
+ // MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse("file:///android_asset/" + MusicLibrary.getMusicFilename(mediaId)));
+
+ //今回は簡易的にmediaIdからインデックスを割り出す。
+
+ // onPlay();
+
+ //MediaSessionが配信する、再生中の曲の情報を設定
+ //mediaSession.setMetadata(MusicLibrary.getMetadata(getApplicationContext(), mediaId));
+ }
+
+ //再生をリクエストされたとき
+ @Override
+ public void onPlay() {
+ //オーディオフォーカスを要求
+// if (audioManager.requestAudioFocus(afChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN) == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+// //取得できたら再生を始める
+// mediaSession.setActive(true);
+// //mediaPlayer;
+// }
+ //mediaSession.setActive(true);
+ switch (mState){
+ case PLAY:
+
+ break;
+ case STOP:
+ if(playListManager.getUnplayedList().size()==0)break;
+ currentVoicememo=playListManager.getNextVoicememo();
+ if(currentVoicememo==null){
+ System.out.println("NULLだよ");
+ mState=State.STOP;
+ clean();
+ return;
+ }
+
+ //callPlayNext(currentVoicememo);
+ // final String url = "http://nitta-lab-www.is.konan-u.ac.jp/data/c948c729-a516-4ca2-88f3-35c0f2d20dba.3gp";
+ final String url=currentVoicememo.getData();
+ // final String url="http://nitta-lab-www.is.konan-u.ac.jp/data/fa96472f-1833-47e7-9297-880e9d02f2f2.3gp";
+ // final String url="http://nitta-lab-www.is.konan-u.ac.jp/data/b9f241de-5728-4538-88ba-1672c9fc0196.3gp";
+
+ mediaPlayer=new MediaPlayer();
+ mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+ try {
+ mediaPlayer.reset();
+ mediaPlayer.setDataSource(url);
+ mediaPlayer.prepare();
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ @Override
+ public void onCompletion(MediaPlayer mediaPlayer) {
+ mState=State.STOP;
+ clean();
+ if(playListManager.getUnplayedList().size()!=0){
+ onPlay();
+ callPlayEnd();
+ }
+ }
+ });
+ callPlayNext(currentVoicememo);
+ mediaPlayer.start();
+ mState=State.PLAY;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ CreateNotification();
+ break;
+ case PAUSE:
+ mediaPlayer.start();
+ mState=State.PLAY;
+ break;
+
+ }
+
+ }
+
+ //一時停止をリクエストされたとき
+ @Override
+ public void onPause() {
+// exoPlayer.setPlayWhenReady(false);
+// //オーディオフォーカスを開放
+// am.abandonAudioFocus(afChangeListener);
+ switch (mState){
+ case PLAY:
+ mediaPlayer.pause();
+ mState=State.PAUSE;
+ break;
+ case STOP:
+
+ break;
+ case PAUSE:
+
+ break;
+
+ }
+ }
+
+ //停止をリクエストされたとき
+ @Override
+ public void onStop() {
+// onPause();
+// mSession.setActive(false);
+// //オーディオフォーカスを開放
+// am.abandonAudioFocus(afChangeListener);
+ }
+
+ //シークをリクエストされたとき
+ @Override
+ public void onSeekTo(long pos) {
+// exoPlayer.seekTo(pos);
+ }
+
+ //次の曲をリクエストされたとき
+ @Override
+ public void onSkipToNext() {
+ if(playListManager.getNextVoicememo()==null){
+ mState=State.STOP;
+ return;
+ }
+ currentVoicememo=playListManager.getNextVoicememo();
+
+ // final String url = "http://nitta-lab-www.is.konan-u.ac.jp/data/c948c729-a516-4ca2-88f3-35c0f2d20dba.3gp";
+ final String url="http://nitta-lab-www.is.konan-u.ac.jp/data/"+currentVoicememo.getData();
+
+ mediaPlayer=new MediaPlayer();
+ mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+ try {
+ mediaPlayer.reset();
+ mediaPlayer.setDataSource(url);
+ mediaPlayer.prepare();
+ mediaPlayer.start();
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ @Override
+ public void onCompletion(MediaPlayer mediaPlayer) {
+ mState=State.STOP;
+ onPlay();
+ }
+ });
+ CreateNotification();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ //前の曲をリクエストされたとき
+ @Override
+ public void onSkipToPrevious() {
+// index--;
+// if (index < 0)//インデックスが0以下になったら
+// index = queueItems.size() - 1;//最後の曲に移動する
+//
+// onPlayFromMediaId(queueItems.get(index).getDescription().getMediaId(), null);
+ }
+
+ //WearやAutoでキュー内のアイテムを選択された際にも呼び出される
+ @Override
+ public void onSkipToQueueItem(long i) {
+// onPlayFromMediaId(queueItems.get((int)i).getDescription().getMediaId(), null);
+ }
+
+ //Media Button Intentが飛んできた時に呼び出される
+ //オーバーライド不要(今回はログを吐くだけ)
+ //MediaSessionのplaybackStateのActionフラグに応じてできる操作が変わる
+ @Override
+ public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
+ KeyEvent key = mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
+ Log.d(TAG, String.valueOf(key.getKeyCode()));
+ return super.onMediaButtonEvent(mediaButtonEvent);
+ }
+ };
+ private void CreateNotification() {
+
+ MediaControllerCompat controller = mediaSession.getController();
+ MediaMetadataCompat mediaMetadata = controller.getMetadata();
+
+ Notification notification;
+ //システムから通知マネージャー取得
+ NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
+ //アプリ名をチャンネルIDとして利用
+ String chID = getString(R.string.app_name);
+
+ //アンドロイドのバージョンで振り分け
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { //APIが「26」以上の場合
+
+ //通知チャンネルIDを生成してインスタンス化
+ NotificationChannel notificationChannel = new NotificationChannel(chID, chID, NotificationManager.IMPORTANCE_DEFAULT);
+ //通知の説明のセット
+ notificationChannel.setDescription(chID);
+ //通知チャンネルの作成
+ notificationManager.createNotificationChannel(notificationChannel);
+ //通知の生成と設定とビルド
+ notification = new NotificationCompat.Builder(this, chID)
+ .setContentTitle(getString(R.string.app_name)) //通知タイトル
+ .setContentText("アプリ通知テスト26以上")//通知内容
+ .setSmallIcon(R.drawable.ic_baseline_play_circle_outline_24)//通知用アイコン
+ .setContentIntent(controller.getSessionActivity())
+ .setSound(null)
+ .addAction(new NotificationCompat.Action(
+ R.drawable.ic_baseline_pause_circle_outline_24, getString(R.string.app_name),
+ MediaButtonReceiver.buildMediaButtonPendingIntent(this,
+ PlaybackStateCompat.ACTION_PAUSE)))
+ .addAction(new NotificationCompat.Action(
+ R.drawable.ic_baseline_play_circle_outline_24, getString(R.string.app_name),
+ MediaButtonReceiver.buildMediaButtonPendingIntent(this,
+ PlaybackStateCompat.ACTION_PLAY)))
+ .setStyle(new androidx.media.app.NotificationCompat.MediaStyle().
+ setMediaSession(mediaSession.getSessionToken())
+ .setShowActionsInCompactView(0))
+ .build(); //通知のビルド
+
+ } else {
+ //APIが「25」以下の場合
+ //通知の生成と設定とビルド
+ notification = new Notification.Builder(this)
+ .setContentTitle(getString(R.string.app_name))
+ .setContentText("アプリ通知テスト25まで")
+ .setSmallIcon(R.drawable.ic_baseline_play_circle_outline_24)
+ .build();
+ }
+
+ //通知の発行
+ notificationManager.notify(1, notification);
+ }
+
+ //一時停止処理
+ public void voicePause(){
+ if(mState==State.PAUSE)return;
+ if(mediaPlayer.isPlaying()){
+ mediaPlayer.pause();
+ System.out.println("pause");
+ mState= State.PAUSE;
+ }else {
+ //mediaPlayer.start();
+ }
+ }
+ //停止からの再生処理
+ public void voicePlay(){
+ if(mediaPlayer.isPlaying()==false){
+ mediaPlayer.start();
+ System.out.println("Restart");
+ }else {
+ // mediaPlayer.pause();
+ }
+ }
+ //完了呼び出し
+ public void completeAction(){
+// prepareAndPlay();
+// mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+// @Override
+// public void onCompletion(MediaPlayer mediaPlayer) {
+// prepareAndPlay();
+// System.out.println("Complete!!!");
+// }
+// });
+ }
}
diff --git a/app/src/main/java/org/ntlab/amaryllis/client/entities/PlayListListener.java b/app/src/main/java/org/ntlab/amaryllis/client/entities/PlayListListener.java
index 05ec5dc..591baba 100644
--- a/app/src/main/java/org/ntlab/amaryllis/client/entities/PlayListListener.java
+++ b/app/src/main/java/org/ntlab/amaryllis/client/entities/PlayListListener.java
@@ -1,6 +1,8 @@
package org.ntlab.amaryllis.client.entities;
+import org.ntlab.amaryllis.client.voiceservice.VoiceMemo;
+
public interface PlayListListener {
- public void onPlayNext(Voicememo voicememo);
+ public void onPlayNext(VoiceMemo voicememo);
public void onPlayEnd();
}
diff --git a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/PlayListManager.java b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/PlayListManager.java
index ec09458..f3f1fd4 100644
--- a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/PlayListManager.java
+++ b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/PlayListManager.java
@@ -14,7 +14,7 @@
if(voicememos.get(i).getVid().equals(playlist.get(j).getVid()))
exist = true;
}
- if(exist = false)
+ if(exist == false)
playlist.add(voicememos.get(i));
}
}
@@ -31,22 +31,23 @@
// unplayedlist.clear();
// unplayedlist.add(playlist.get(index));
- for(int i = 0;i < unplayedlist.size(); i++) {
+ for(int i = index;i < playlist.size(); i++) {
boolean exist = false;
- for(int j= index;j < playlist.size(); j++){
- if(playlist.get(j).getVid().equals(unplayedlist.get(i).getVid()))
+ for(int j= 0;j < unplayedlist.size(); j++){
+ if(playlist.get(i).getVid().equals(unplayedlist.get(j).getVid()))
exist = true;
}
- if(exist = false)
- playlist.add(unplayedlist.get(i));
+ if(exist == false)
+ unplayedlist.add(playlist.get(i));
}
- for(int i = index; i < playlist.size(); i++){
- unplayedlist.add(playlist.get(i));
- }
+// for(int i = index; i < playlist.size(); i++){
+//// // unplayedlist.add(playlist.get(i));
+//// }
return unplayedlist;
}
public VoiceMemo getNextVoicememo(){
+ if(getUnplayedList().size()==0)return null;
VoiceMemo result=getUnplayedList().remove(0);
next();
return result;
diff --git a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/TestVoiceService.java b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/TestVoiceService.java
index 236851c..5cb2532 100644
--- a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/TestVoiceService.java
+++ b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/TestVoiceService.java
@@ -95,7 +95,6 @@
audioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE);
mState = State.STOP;
-
sampleReceiver=new ComponentName(this,VoicememoReceiver.class);
mediaPlayer=new MediaPlayer();
mediaSession=new MediaSessionCompat(getApplicationContext(),TAG);
diff --git a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoicememoReceiver.java b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoicememoReceiver.java
index bdc2c8e..011140b 100644
--- a/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoicememoReceiver.java
+++ b/app/src/main/java/org/ntlab/amaryllis/client/voiceservice/VoicememoReceiver.java
@@ -12,6 +12,7 @@
import android.view.KeyEvent;
import org.ntlab.amaryllis.client.TestPlayActivity;
+import org.ntlab.amaryllis.client.entities.AmaryllisBackgroundService;
public class VoicememoReceiver extends BroadcastReceiver {
TestVoiceService myService;
@@ -30,7 +31,7 @@
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) {
- Intent startServiceIntent = new Intent(context,TestVoiceService.class);
+ Intent startServiceIntent = new Intent(context, AmaryllisBackgroundService.class);
KeyEvent keyEvent = (KeyEvent) intent.getExtras().get(
Intent.EXTRA_KEY_EVENT);
@@ -45,7 +46,7 @@
break;
case KeyEvent.KEYCODE_MEDIA_PLAY:
// 再生ボタン押下時の処理を記述
- startServiceIntent.setAction(TestVoiceService.ACTION_PLAY);
+ startServiceIntent.setAction(AmaryllisBackgroundService.ACTION_PLAY);
context.startService(startServiceIntent);
break;
case KeyEvent.KEYCODE_MEDIA_PAUSE: