kotlin Android getParcelableExtra在API 33中已弃用

p8h8hvxi  于 2023-01-26  发布在  Kotlin
关注(0)|答案(3)|浏览(729)

我想使用intent方法从另一个Activity获取URI,但intent.getParcelableExtra已弃用。如果使用

if (SDK_INT >= 33) {
    
        intent.getParcelableExtra("EXTRA_URI", Uri::class.java).let { ueray ->
                timeLineView.post({
                    if (ueray != null) {
                        setBitmap(ueray)
                        videoView.setVideoURI(ueray)
    
                    }
                })
            }
        }
        else {
            @Suppress("DEPRECATION")
       intent.getParcelableExtra<Uri>("EXTRA_URI").let { ueray ->
                timeLineView.post({
                    if (ueray != null) {
                        setBitmap(ueray)
                        videoView.setVideoURI(ueray)
    
                    }
                })
    
            }
        }

这段代码可以Google Play拒绝我的应用吗?因为在remove(SDK_INT〉= 33)语句中,它显示调用需要API级别33(当前最低级别为21):android.content.Intent#getParcelableExtra.提前感谢

ocebsuys

ocebsuys1#

以下是Intent的扩展函数,它们是向后兼容的:

@Suppress("DEPRECATION")
inline fun <reified P : Parcelable> Intent.getParcelable(key: String): P? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        getParcelableExtra(key, P::class.java)
    } else {
        getParcelableExtra(key)
    }
}

@Suppress("DEPRECATION")
inline fun <reified P : Parcelable> Intent.getParcelableArrayList(key: String): ArrayList<P>? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        getParcelableArrayListExtra(key, P::class.java)
    } else {
        getParcelableArrayListExtra(key)
    }
}
@Suppress("DEPRECATION")
inline fun <reified P : Parcelable> Bundle.getParcelableValue(key: String): P? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        getParcelable(key, P::class.java)
    } else {
        getParcelable(key)
    }
}

@Suppress("DEPRECATION")
inline fun <reified P : Parcelable> Bundle.getParcelableArrayListValue(key: String): ArrayList<P>? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        getParcelableArrayList(key, P::class.java)
    } else {
        getParcelableArrayList(key)
    }
}
lkaoscv7

lkaoscv72#

不,Google不会拒绝您的应用如果您使用弃用的方法,特别是当使用它是必要的,因为你没有其他选择,只能在SDK的〈33上使用它。
我的应用在较低SDK上使用弃用方法,但这是唯一的可能性,并且应用在Google Play商店上运行良好且可访问:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val vibrationEffect = VibrationEffect.createWaveform(
        longArrayOf(1000, 1000),
        intArrayOf(255, 0),
        0
    )

    vibrator.vibrate(vibrationEffect, vibrationAudioAttributes)
} else {
    // deprecated but working on lower SDK's
    vibrator.vibrate(longArrayOf(0, 1000, 1000), 0, vibrationAudioAttributes)
}
cnh2zyt3

cnh2zyt33#

代替uri,把uri. toString()作为一个额外的字符串。
很简单。

相关问题