我已经升级到targetSdkVersion和。compileSdkVersion33
我现在收到一条警告,告诉我onBackPressed已被弃用。
我看到建议使用android.window.OnBackInvokedCallback或androidx.activity.OnBackPressedCallback来处理后退导航。任何人都可以帮助我使用更新的方法吗?
我在onBackPressed()if (isTaskRoot) {}方法内部使用来检查该活动是否是活动堆栈上的最后一个活动。
override fun onBackPressed() {
if (isTaskRoot) { // Check whether this activity is last on the activity stack. (Check whether this activity opened from a Push Notification.)
startActivity(Intent(mContext, Dashboard::class.java))
finish()
} else {
finishWithResultOK()
}
}
Run Code Online (Sandbox Code Playgroud) navigation android kotlin deprecation-warning android-tiramisu
我已经升级到targetSdkVersion和。compileSdkVersion33
我现在收到警告,告诉我getSerializedExtra(name:)和getParcelableExtra(name:)方法已被弃用。
我从Intent类中的文档检查并确认这两种方法确实已被弃用。
该文档建议我改用新的getSerializedExtra(name:clazz:)和getParcelableExtra(name:clazz:)方法。
谁能帮助我使用新方法?
Object:Listor时发出警告ArrayList:android android-intent kotlin deprecation-warning android-tiramisu
因此,当我在developer.android 站点中读到时,它Android 13在“权限”字段中带来了新的更改。
我有一个聊天应用程序,我需要拨打电话、打开相机、录制音频、在外部存储中读取和写入。因此,在 SplashScreen 中,我向用户请求这些权限。然而,其中一些没有被授予,但甚至系统也没有向我索要这些。
AndroidManifest.xml这是我在文件中声明的内容
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature
android:glEsVersion="0x00020000" …Run Code Online (Sandbox Code Playgroud) 由于从 Android 33 开始旧版本Activity.onBackPressed()已被弃用,那么以编程方式调用它的更好方法是什么?
例子:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
// Handle default back arrow click
android.R.id.home -> {
onBackPressed()
}
...
Run Code Online (Sandbox Code Playgroud)
我们可以创建并添加这样的OnBackPressedCallback内容onBackPressedDispatcher。
onBackPressedDispatcher.addCallback(
this, // Lifecycle owner
backPressedCallback
)
private val backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (viewPager.currentItem != 0)
viewPager.setCurrentItem(0, true)
else
finish()
}
}
Run Code Online (Sandbox Code Playgroud)
然后将旧的替换onBackPressed为
// Handle default back arrow click
android.R.id.home -> {
backPressedCallback.handleOnBackPressed()
}
Run Code Online (Sandbox Code Playgroud)
但我看到了这个公共方法onBackPressedDispatcher,想知道是否可以用它来代替。
onBackPressedDispatcher.onBackPressed() …Run Code Online (Sandbox Code Playgroud) android onbackpressed android-jetpack android-jetpack-navigation android-tiramisu
我收到一条消息,表明此函数(或其构造函数)已被弃用。该函数有一个新的构造函数,它接受附加参数'Geocoder.GeocodeListener listener',但该新构造函数需要 API 级别 33 及以上。对于较低的API级别我应该做什么,解决方案是什么?
android geocoding kotlin deprecation-warning android-tiramisu
lat lng在我的 Android 应用程序中,我尝试使用地理编码器使用getFromLocation方法获取地址,GeocodeListener
但有时应用程序会崩溃
Caused by java.io.IOException: egma: DEADLINE_EXCEEDED: Deadline CallOptions will be exceeded in 4.959774531s.
at android.location.Geocoder$GeocodeListener.getResults(Geocoder.java:246)
at android.location.Geocoder.getFromLocation(Geocoder.java:134)
Run Code Online (Sandbox Code Playgroud)
geocoder.getFromLocation(
latLng.latitude,
latLng.longitude,
1,
object : Geocoder.GeocodeListener {
override fun onGeocode(addresses: MutableList<Address>) {
val addressLine = addresses.first().getAddressLine(0)
onAddressResult(addressLine, null) // callback
}
override fun onError(errorMessage: String?) {
super.onError(errorMessage)
onAddressResult(null, errorMessage)
}
},
)
Run Code Online (Sandbox Code Playgroud)
坠机原因是什么。我怎样才能避免它?
我已经将targetSdkVersion和compileSdkVersion升级到33。
现在收到警告 getApplicationInfo(String,int) 已弃用。
建议使用 getApplicationInfo(java.lang.String, android.content.pm.PackageManager.ApplicationInfoFlags) 代替。任何人都可以帮助我使用更新的方法。
例子:
@SuppressLint("HardwareIds")
public void initDbx(){
try {
ApplicationInfo app = activity.getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA);
dbx.game_id = String.valueOf(app.metaData.getInt("main_id"));
dbx.game_name = activity.getResources().getString(R.string.app_name);
dbx.package_name = activity.getApplication().getPackageName();
dbx.user_id = Settings.Secure.getString(activity.getContentResolver(), Settings.Secure.ANDROID_ID);
dbx.check_net = isConnectionAvailable();
//dbx.getUserInfos(activity);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我这样做了:
@SuppressLint("HardwareIds")
public void initDbx(){
try {
// ApplicationInfo app = activity.getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
ApplicationInfo app = activity.getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.ApplicationInfoFlags.of(0));
}else{
ApplicationInfo app = activity.getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA);
}
dbx.game_id = String.valueOf(app.metaData.getInt("main_id"));
dbx.game_name …Run Code Online (Sandbox Code Playgroud) navigation android kotlin deprecation-warning android-tiramisu
我按照此页面:https://developer.android.com/about/versions/13/setup-sdk 来设置 Android 13 SDK。
在我的build.gradle:
android {
compileSdkVersion("Tiramisu")
defaultConfig {
targetSdkVersion("Tiramisu")
}
}
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误:
> Unsupported value: Tiramisu. Format must be one of:
- android-31
- android-31-ext2
- android-T
- vendorName:addonName:31
Run Code Online (Sandbox Code Playgroud)
我尝试使用“33”而不是“提拉米苏”,但它不起作用。我使用最新的 Android Studio Preview 作为说明。
有人尝试使用 Android 13 SDK 吗?
android android-sdk-tools android-studio android-tiramisu android-13
因此,我们正要提交我们的应用程序进行审核,但我们被 Google 对针对 Android 13 及更高版本的应用程序的新要求阻止了,该要求基本上告诉开发人员AD_ID在其应用程序中披露权限的目的。问题是,我们的应用程序没有显式声明AD_ID权限,但事实证明某些 play-services 库或 Firebase 使用了它,因此它已合并到我们应用程序的清单中。
因此,我找到了一些解决方案,以便库声明的权限不会合并到应用程序的清单中,但我担心我们的应用程序依赖于 Firebase 的功能可能会停止工作。有人遇到过这种情况吗?
google-play firebase android-permissions android-tiramisu android-13
我目前正在 Android 13 Tiramisu 上进行一些测试,但无法在我的设备上安装该应用程序。我已经在 Android Studio 中安装了 Android Tiramisu Preview (Rev.4)。我创建了一个示例应用程序并按如下方式配置它
// build.gradle
android {
compileSdkPreview "android-Tiramisu"
defaultConfig {
applicationId "com.example.myapplication"
minSdk 16
targetSdkPreview "Tiramisu"
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
...
Run Code Online (Sandbox Code Playgroud)
然后我尝试在我的Android 12(不是提拉米苏)设备上安装此应用程序。当我这样做时,我收到以下错误
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_OLDER_SDK
List of apks:
[0] '/Users/myuser/dev/sample/MyApplication/app/build/outputs/apk/debug/app-debug.apk'
The application's minSdkVersion is newer than the device API level.
Run Code Online (Sandbox Code Playgroud)
在 build.gradle 中,我已指定minSdk 16,因此应该可以在 Android 12 设备上安装该应用程序。我怎么解决这个问题?(当targetSdkVersion设置为Tiramisu以外的任何值时,不会出现此问题)
android-tiramisu ×10
android ×9
kotlin ×4
android-13 ×3
navigation ×2
firebase ×1
geocoder ×1
geocoding ×1
google-play ×1