mirror of
https://github.com/androidx/media.git
synced 2025-05-13 18:50:02 +08:00
Fixed demo player permissions bug
API 23 requires the permissions to be granted at runtime. This CL submits a solution for EXTERNAL_STORAGE, since it is the only dangerous privilege required so far.
This commit is contained in:
parent
1fc32d56c8
commit
61fb0c558e
@ -38,10 +38,12 @@ import com.google.android.exoplayer.util.MimeTypes;
|
|||||||
import com.google.android.exoplayer.util.Util;
|
import com.google.android.exoplayer.util.Util;
|
||||||
import com.google.android.exoplayer.util.VerboseLogUtil;
|
import com.google.android.exoplayer.util.VerboseLogUtil;
|
||||||
|
|
||||||
|
import android.Manifest.permission;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@ -97,6 +99,9 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
|
|||||||
private static final int MENU_GROUP_TRACKS = 1;
|
private static final int MENU_GROUP_TRACKS = 1;
|
||||||
private static final int ID_OFFSET = 2;
|
private static final int ID_OFFSET = 2;
|
||||||
|
|
||||||
|
// For use when requesting permission.
|
||||||
|
private static final String URI_FILE_SCHEME = "file";
|
||||||
|
|
||||||
private static final CookieManager defaultCookieManager;
|
private static final CookieManager defaultCookieManager;
|
||||||
static {
|
static {
|
||||||
defaultCookieManager = new CookieManager();
|
defaultCookieManager = new CookieManager();
|
||||||
@ -207,7 +212,9 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
|
|||||||
provider = intent.getStringExtra(PROVIDER_EXTRA);
|
provider = intent.getStringExtra(PROVIDER_EXTRA);
|
||||||
configureSubtitleView();
|
configureSubtitleView();
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
preparePlayer(true);
|
if (!maybeRequestPermission()) {
|
||||||
|
preparePlayer(true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
player.setBackgrounded(false);
|
player.setBackgrounded(false);
|
||||||
}
|
}
|
||||||
@ -254,6 +261,49 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
|
|||||||
player.setBackgrounded(backgrounded);
|
player.setBackgrounded(backgrounded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Permission request listener method
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
||||||
|
int[] grantResults) {
|
||||||
|
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
preparePlayer(true);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(getApplicationContext(), R.string.storage_permission_denied,
|
||||||
|
Toast.LENGTH_LONG).show();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Permission management methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether it is necessary to ask for permission to read storage. If necessary, it also
|
||||||
|
* requests permission.
|
||||||
|
*
|
||||||
|
* @return true if a permission request is made. False if it is not necessary.
|
||||||
|
*/
|
||||||
|
@TargetApi(23)
|
||||||
|
private boolean maybeRequestPermission() {
|
||||||
|
if (requiresPermission(contentUri)) {
|
||||||
|
requestPermissions(new String[] {permission.READ_EXTERNAL_STORAGE}, 0);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean uriIsLocalFile(Uri uri) {
|
||||||
|
return URI_FILE_SCHEME.equals(uri.getScheme()) || TextUtils.isEmpty(uri.getScheme());
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(23)
|
||||||
|
private boolean requiresPermission(Uri uri) {
|
||||||
|
return Util.SDK_INT >= 23 && uriIsLocalFile(uri)
|
||||||
|
&& checkSelfPermission(permission.READ_EXTERNAL_STORAGE)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED;
|
||||||
|
}
|
||||||
|
|
||||||
// Internal methods
|
// Internal methods
|
||||||
|
|
||||||
private RendererBuilder getRendererBuilder() {
|
private RendererBuilder getRendererBuilder() {
|
||||||
@ -454,7 +504,7 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback,
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
Menu menu = popup.getMenu();
|
Menu menu = popup.getMenu();
|
||||||
// ID_OFFSET ensures we avoid clashing with Menu.NONE (which equals 0)
|
// ID_OFFSET ensures we avoid clashing with Menu.NONE (which equals 0).
|
||||||
menu.add(MENU_GROUP_TRACKS, DemoPlayer.TRACK_DISABLED + ID_OFFSET, Menu.NONE, R.string.off);
|
menu.add(MENU_GROUP_TRACKS, DemoPlayer.TRACK_DISABLED + ID_OFFSET, Menu.NONE, R.string.off);
|
||||||
for (int i = 0; i < trackCount; i++) {
|
for (int i = 0; i < trackCount; i++) {
|
||||||
menu.add(MENU_GROUP_TRACKS, i + ID_OFFSET, Menu.NONE,
|
menu.add(MENU_GROUP_TRACKS, i + ID_OFFSET, Menu.NONE,
|
||||||
|
@ -43,4 +43,6 @@
|
|||||||
|
|
||||||
<string name="drm_error_unknown">An unknown DRM error occurred</string>
|
<string name="drm_error_unknown">An unknown DRM error occurred</string>
|
||||||
|
|
||||||
|
<string name="storage_permission_denied">Permission to access storage was denied</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user