- Fixed crash when stopping playback in notification
- Audio output change detection (headphones unplugged) - Android 5.0 Support (untested)
This commit is contained in:
parent
c86ebdcf2c
commit
de7ca4f451
@ -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
|
||||||
|
@ -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()...");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user