下面列出了怎么用android.app.PictureInPictureParams的API类实例代码及写法,或者点击链接到github查看源代码。
protected boolean enterPIPMode() {
if (enteringPIPMode) {
return true;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
appPlayer != null &&
!startingFilePickerActivity &&
!startingSignInFlowActivity) {
enteringPIPMode = true;
PictureInPictureParams params = new PictureInPictureParams.Builder().build();
try {
enterPictureInPictureMode(params);
return true;
} catch (IllegalStateException ex) {
// pass
enteringPIPMode = false;
}
}
return false;
}
/**
* When user closes the activity
*/
@Override
public void onBackPressed() {
if (mIsMonitoring) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
enterPictureInPictureMode(new PictureInPictureParams.Builder().build());
}
else
{
finish();
}
}
else
{
finish();
}
}
@Override
protected void onUserLeaveHint() {
if (deviceSupportsPipMode()) {
PictureInPictureParams params = new PictureInPictureParams.Builder()
.setAspectRatio(new Rational(16, 9))
.build();
setPictureInPictureParams(params);
//noinspection deprecation
enterPictureInPictureMode();
}
}
@Override
public void onUserLeaveHint() {
boolean pipEnabled = sharedPref.getBoolean(PREF_PIP_MODE, false);
if (supportsPiPMode() && pipEnabled) {
PictureInPictureParams params = new PictureInPictureParams.Builder()
.setAspectRatio(new Rational(1200, 720)).build();
enterPictureInPictureMode(params);
}
}
@Override
public void onUserLeaveHint () {
if (mIsMonitoring) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
enterPictureInPictureMode(new PictureInPictureParams.Builder().build());
}
}
}
@Override
protected void onPause() {
super.onPause();
if (player.getPlayWhenReady() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
PictureInPictureParams params = new PictureInPictureParams.Builder()
.build();
enterPictureInPictureMode(params);
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void startPictureInPicture() {
try {
enterPictureInPictureMode(
new PictureInPictureParams.Builder()
.setAspectRatio(new Rational(10, 16))
.build()
);
} catch (final IllegalStateException e) {
//this sometimes happens on Samsung phones (possibly when Knox is enabled)
Log.w(Config.LOGTAG, "unable to enter picture in picture mode", e);
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void startPictureInPicture() {
try {
enterPictureInPictureMode(
new PictureInPictureParams.Builder()
.setAspectRatio(new Rational(10, 16))
.build()
);
} catch (final IllegalStateException e) {
//this sometimes happens on Samsung phones (possibly when Knox is enabled)
Log.w(Config.LOGTAG, "unable to enter picture in picture mode", e);
}
}
@SuppressWarnings("unused")
public void newApiMethod(PictureInPictureParams params) {}
private synchronized void updatePictureInPictureParams(@Nullable Rational aspect) {
if (aspect == null) {
aspect = ScreenUtils.getDefaultDisplayRational(this);
}
final List<RemoteAction> remoteActions = new ArrayList<>();
if (mShareIntent != null) {
final RemoteAction shareAction = new RemoteAction(
Icon.createWithResource(this, R.drawable.ic_share_white_24dp),
getString(R.string.action_share_screenshot),
getString(R.string.action_share_screenshot),
PendingIntent.getBroadcast(this, 0,
new Intent(ACTION_SHARE), PendingIntent.FLAG_UPDATE_CURRENT)
);
remoteActions.add(shareAction);
}
if (mDeleteIntent != null) {
final RemoteAction deleteAction = new RemoteAction(
Icon.createWithResource(this, R.drawable.ic_delete_white_24dp),
getString(R.string.action_delete_screenshot),
getString(R.string.action_delete_screenshot),
PendingIntent.getBroadcast(this, 0,
new Intent(ACTION_DELETE), PendingIntent.FLAG_UPDATE_CURRENT)
);
remoteActions.add(deleteAction);
}
if (mEditIntent != null) {
final RemoteAction editAction = new RemoteAction(
Icon.createWithResource(this, R.drawable.ic_edit_white_24dp),
getString(R.string.action_edit),
getString(R.string.action_edit),
PendingIntent.getBroadcast(this, 0,
new Intent(ACTION_EDIT), PendingIntent.FLAG_UPDATE_CURRENT)
);
remoteActions.add(editAction);
}
mPIPParams = new PictureInPictureParams.Builder()
.setAspectRatio(aspect)
.setActions(remoteActions)
.build();
if (isInPictureInPictureMode()) {
setPictureInPictureParams(mPIPParams);
}
}
@Override
public boolean enterPictureInPictureMode(@NonNull PictureInPictureParams params) {
return super.enterPictureInPictureMode(params);
}
private void openPicInPicMode() {
this.enterPictureInPictureMode(new PictureInPictureParams.Builder().build());
}
public void pipActivity(View view) {
PictureInPictureParams params = new PictureInPictureParams.Builder()
.setAspectRatio(new Rational(9,16)) // Portrait Aspect Ratio
.build();
enterPictureInPictureMode(params);
}
/**
* Puts the activity in picture-in-picture mode if possible in the current system state. The
* set parameters in {@param params} will be combined with the parameters from prior calls to
* {@link #setPictureInPictureParams(PictureInPictureParams)}.
* <p>
* The system may disallow entering picture-in-picture in various cases, including when the
* activity is not visible, if the screen is locked or if the user has an activity pinned.
*
* @param params non-null parameters to be combined with previously set parameters when entering
* picture-in-picture.
* @return true if the system successfully put this activity into picture-in-picture mode or was
* already in picture-in-picture mode (@see {@link #isInPictureInPictureMode()). If the device
* does not support picture-in-picture, return false.
* @see android.R.attr#supportsPictureInPicture
* @see PictureInPictureParams
*/
@Override
public boolean enterPictureInPictureMode(@NonNull PictureInPictureParams params) {
return super.enterPictureInPictureMode(params);
}
/**
* Updates the properties of the picture-in-picture activity, or sets it to be used later when
* {@link #enterPictureInPictureMode()} is called.
*
* @param params the new parameters for the picture-in-picture.
*/
@Override
public void setPictureInPictureParams(@NonNull PictureInPictureParams params) {
super.setPictureInPictureParams(params);
}
boolean enterPictureInPictureMode(@NonNull PictureInPictureParams params);
void setPictureInPictureParams(@NonNull PictureInPictureParams params);
boolean super_enterPictureInPictureMode(@NonNull PictureInPictureParams params);
void super_setPictureInPictureParams(@NonNull PictureInPictureParams params);