mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Request notification permission when starting session demo app
#minor-release PiperOrigin-RevId: 572556101
This commit is contained in:
parent
4dc3db4da3
commit
c7a091a973
@ -15,8 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.demo.session
|
package androidx.media3.demo.session
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.pm.PackageManager
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
@ -25,6 +28,7 @@ import android.view.ViewGroup
|
|||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.ListView
|
import android.widget.ListView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
@ -81,6 +85,14 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (
|
||||||
|
Build.VERSION.SDK_INT >= 33 &&
|
||||||
|
checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
|
||||||
|
PackageManager.PERMISSION_GRANTED
|
||||||
|
) {
|
||||||
|
requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS), /* requestCode= */ 0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
@ -101,6 +113,23 @@ class MainActivity : AppCompatActivity() {
|
|||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onRequestPermissionsResult(
|
||||||
|
requestCode: Int,
|
||||||
|
permissions: Array<out String>,
|
||||||
|
grantResults: IntArray
|
||||||
|
) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||||
|
if (grantResults.isEmpty()) {
|
||||||
|
// Empty results are triggered if a permission is requested while another request was already
|
||||||
|
// pending and can be safely ignored in this case.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
Toast.makeText(applicationContext, R.string.notification_permission_denied, Toast.LENGTH_LONG)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun initializeBrowser() {
|
private fun initializeBrowser() {
|
||||||
browserFuture =
|
browserFuture =
|
||||||
MediaBrowser.Builder(
|
MediaBrowser.Builder(
|
||||||
|
@ -21,4 +21,6 @@
|
|||||||
<string name="shuffle">Shuffle</string>
|
<string name="shuffle">Shuffle</string>
|
||||||
<string name="play_button">Play</string>
|
<string name="play_button">Play</string>
|
||||||
<string name="waiting_for_metadata">Waiting for playlist to load…</string>
|
<string name="waiting_for_metadata">Waiting for playlist to load…</string>
|
||||||
|
<string name="notification_permission_denied">
|
||||||
|
"Without notification access the app can't warn about failed background operations"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
<manifest package="androidx.media3.demo.session.service">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="androidx.media3.demo.session.service">
|
||||||
<uses-sdk />
|
<uses-sdk />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -15,11 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.demo.session
|
package androidx.media3.demo.session
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.Manifest
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.annotation.OptIn
|
import androidx.annotation.OptIn
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
@ -136,8 +137,15 @@ open class DemoPlaybackService : MediaLibraryService() {
|
|||||||
* by a media controller to resume playback when the {@link MediaSessionService} is in the
|
* by a media controller to resume playback when the {@link MediaSessionService} is in the
|
||||||
* background.
|
* background.
|
||||||
*/
|
*/
|
||||||
@SuppressLint("MissingPermission") // TODO: b/280766358 - Request this permission at runtime.
|
|
||||||
override fun onForegroundServiceStartNotAllowedException() {
|
override fun onForegroundServiceStartNotAllowedException() {
|
||||||
|
if (
|
||||||
|
Build.VERSION.SDK_INT >= 33 &&
|
||||||
|
checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
|
||||||
|
PackageManager.PERMISSION_GRANTED
|
||||||
|
) {
|
||||||
|
// Notification permission is required but not granted
|
||||||
|
return
|
||||||
|
}
|
||||||
val notificationManagerCompat = NotificationManagerCompat.from(this@DemoPlaybackService)
|
val notificationManagerCompat = NotificationManagerCompat.from(this@DemoPlaybackService)
|
||||||
ensureNotificationChannel(notificationManagerCompat)
|
ensureNotificationChannel(notificationManagerCompat)
|
||||||
val builder =
|
val builder =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user