Request notification permission when starting session demo app

#minor-release

PiperOrigin-RevId: 572556101
This commit is contained in:
ibaker 2023-10-11 06:25:44 -07:00 committed by Copybara-Service
parent 4dc3db4da3
commit c7a091a973
4 changed files with 44 additions and 3 deletions

View File

@ -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(

View File

@ -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>

View File

@ -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>

View File

@ -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 =