java - MediaControllerCompat & MediaSessionCompat Android X?
问题描述
我对 MediaControllerCompat 和 MediaSessionCompat 的导入
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
private MediaSessionCompat mMediaSessionCompat;
private MediaControllerCompat.TransportControls mTransportControls;
我最近将我的项目迁移到了 Android X,但是这些导入在迁移时并没有改变,而是在我的 gradle 的依赖项中添加了它。
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
现在我想知道为什么他们没有更改为 Android X,我搜索了MediaControllerCompat 和 MediaSessionCompat的 android x 依赖项,但我找不到它们。
解决方案
在您的 gradle.properties 中,您可以看到 android.enableJetifier=true 当我们在 androidx 中迁移项目时处理所有第三方库,一个属性将处理所有迁移内容。
现在关于您的问题,我在开发 mp3 音频应用程序时使用了这两个类,但是在迁移到 Androidx 之后,它仍然没有添加任何额外的库。
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
我的课 :
package com.broadcast.audioplayerkotlin
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatSeekBar
import android.support.v4.media.session.MediaControllerCompat
import android.support.v4.media.MediaMetadataCompat
import android.widget.SeekBar
import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log
class MediaSeekBar : AppCompatSeekBar {
private val TAG = "MediaSeekBar"
private var mMediaController: MediaControllerCompat? = null
private var mControllerCallback: ControllerCallback? = null
private var mIsTracking = false
private val mOnSeekBarChangeListener = object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {}
override fun onStartTrackingTouch(seekBar: SeekBar) {
mIsTracking = true
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
mMediaController?.transportControls?.seekTo(progress.toLong())
mIsTracking = false
}
}
constructor(ctx: Context) : super(ctx)
constructor(code: Context, attrs: AttributeSet?) : super(code, attrs) {
super.setOnSeekBarChangeListener(mOnSeekBarChangeListener)
}
constructor(code: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(code, attrs) {
}
override fun setOnSeekBarChangeListener(l: SeekBar.OnSeekBarChangeListener) {
// Prohibit adding seek listeners to this subclass.
throw UnsupportedOperationException("Cannot add listeners to a MediaSeekBar")
}
fun setMediaController(mediaController: MediaControllerCompat?) {
if (mediaController != null) {
mControllerCallback = ControllerCallback()
mediaController.registerCallback(mControllerCallback!!)
} else if (mMediaController != null) {
mMediaController!!.unregisterCallback(mControllerCallback!!)
mControllerCallback = null
}
mMediaController = mediaController
}
fun disconnectController() {
if (mMediaController != null) {
mMediaController!!.unregisterCallback(mControllerCallback!!)
mControllerCallback = null
mMediaController = null
}
}
private inner class ControllerCallback : MediaControllerCompat.Callback() {
override fun onSessionDestroyed() {
super.onSessionDestroyed()
}
override fun onPlaybackStateChanged(state: PlaybackStateCompat?) {
super.onPlaybackStateChanged(state)
Log.d(TAG, "onPlaybackStateChanged: CALLED: playback state: " + state!!)
val progress = state?.position?.toInt() ?: 0
setProgress(progress)
}
override fun onMetadataChanged(metadata: MediaMetadataCompat?) {
super.onMetadataChanged(metadata)
}
}
}
摇篮依赖:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//RecyclerView
implementation 'com.android.support:recyclerview-v7:28.0.0'
def glideVersion = "4.8.0"
implementation "com.github.bumptech.glide:glide:$glideVersion"
annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion"
// ExoPlayer
implementation 'com.google.android.exoplayer:exoplayer:2.8.4' // 2.9.0 has min sdk 26
// Firestore
implementation 'com.google.firebase:firebase-firestore:17.1.2'
}
只是好奇为什么要添加额外的库。
推荐阅读
- python - 如何使用 pylucene 创建 CustomSimilarity 类?
- c++ - 简单的 C++ 正则表达式在 OSX 中出现运行时错误,但在 Windows 中
- cassandra - Cassandra CQL 如何添加约束?
- php - array_diff 没有返回。为什么?
- java - 找不到 Spring“类路径:”位置
- javascript - 更改计算基于选择值下拉Javascript
- excel - 获取打开的 Excel 工作簿的所有文件名
- reactjs - React Redux Reducer 不保留其他状态
- javascript - 我需要将 Json 转换为数组,我需要读取这个数组
- python - Py2exe 没有正确安装