- Fixed crash when stopping playback in notification

- Audio output change detection (headphones unplugged)
- Android 5.0 Support (untested)
This commit is contained in:
Stefan Schueller 2018-12-17 18:54:09 +01:00
parent c86ebdcf2c
commit de7ca4f451
3 changed files with 47 additions and 19 deletions

View File

@ -4,10 +4,10 @@ android {
compileSdkVersion 28 compileSdkVersion 28
defaultConfig { defaultConfig {
applicationId "net.schueller.peertube" applicationId "net.schueller.peertube"
minSdkVersion 23 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 106 versionCode 107
versionName "1.0.6" versionName "1.0.7"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
@ -44,11 +44,11 @@ android {
// implementation 'org.webrtc:google-webrtc:1.0.+' // implementation 'org.webrtc:google-webrtc:1.0.+'
// video player // video player
implementation 'com.google.android.exoplayer:exoplayer-core:2.8.1' implementation 'com.google.android.exoplayer:exoplayer-core:2.9.2'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.8.1' implementation 'com.google.android.exoplayer:exoplayer-dash:2.9.2'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.8.1' implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.2'
implementation 'com.google.android.exoplayer:exoplayer-hls:2.8.1' implementation 'com.google.android.exoplayer:exoplayer-hls:2.9.2'
implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.8.1' implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.9.2'
// implementation 'com.devbrackets.android:exomedia:4.1.0' // implementation 'com.devbrackets.android:exomedia:4.1.0'
// testing // testing

View File

@ -355,8 +355,10 @@ public class VideoPlayActivity extends AppCompatActivity implements VideoRendere
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
unbindService(mConnection); if (mBound) {
mBound = false; unbindService(mConnection);
mBound = false;
}
Log.v(TAG, "onStop()..."); Log.v(TAG, "onStop()...");
} }

View File

@ -1,19 +1,20 @@
package net.schueller.peertube.service; package net.schueller.peertube.service;
import android.app.Notification; import android.app.Notification;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.media.AudioManager;
import android.net.Uri; import android.net.Uri;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Log; import android.util.Log;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
@ -23,16 +24,14 @@ import com.google.android.exoplayer2.ui.PlayerNotificationManager;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.squareup.picasso.Picasso;
import net.schueller.peertube.R; import net.schueller.peertube.R;
import net.schueller.peertube.activity.VideoPlayActivity; import net.schueller.peertube.activity.VideoPlayActivity;
import net.schueller.peertube.helper.MetaDataHelper; import net.schueller.peertube.helper.MetaDataHelper;
import net.schueller.peertube.model.Video; import net.schueller.peertube.model.Video;
import java.io.IOException; import static android.media.session.PlaybackState.ACTION_PAUSE;
import static android.media.session.PlaybackState.ACTION_PLAY;
import retrofit2.http.FormUrlEncoded;
public class VideoPlayerService extends Service { public class VideoPlayerService extends Service {
@ -48,14 +47,32 @@ public class VideoPlayerService extends Service {
private PlayerNotificationManager playerNotificationManager; private PlayerNotificationManager playerNotificationManager;
private IntentFilter becomeNoisyIntentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver();
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
Log.v("VideoPlayerService", "onCreate...");
player = ExoPlayerFactory.newSimpleInstance(getApplicationContext(), new DefaultTrackSelector()); player = ExoPlayerFactory.newSimpleInstance(getApplicationContext(), new DefaultTrackSelector());
// Stop player if audio device changes, e.g. headphones unplugged
player.addListener(new Player.EventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == ACTION_PAUSE) { // this means that pause is available, hence the audio is playing
Log.v("VideoPlayerService", "ACTION_PLAY: " + playbackState);
registerReceiver(myNoisyAudioStreamReceiver, becomeNoisyIntentFilter);
}
if (playbackState == ACTION_PLAY) { // this means that play is available, hence the audio is paused or stopped
Log.v("VideoPlayerService", "ACTION_PAUSE: " + playbackState);
unregisterReceiver(myNoisyAudioStreamReceiver);
}
}
} );
} }
public class LocalBinder extends Binder { public class LocalBinder extends Binder {
@ -143,7 +160,6 @@ public class VideoPlayerService extends Service {
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT);
} }
@Nullable
@Override @Override
public String getCurrentContentText(Player player) { public String getCurrentContentText(Player player) {
return MetaDataHelper.getMetaString( return MetaDataHelper.getMetaString(
@ -184,4 +200,14 @@ public class VideoPlayerService extends Service {
} }
// pause playback on audio output change
private class BecomingNoisyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
player.setPlayWhenReady(false);
}
}
}
} }