标签: android-tiramisu

onBackPressed() 已弃用。还有什么选择呢?

我已经升级到targetSdkVersion和。compileSdkVersion33

我现在收到一条警告,告诉我onBackPressed已被弃用。

我看到建议使用android.window.OnBackInvokedCallbackandroidx.activity.OnBackPressedCallback来处理后退导航。任何人都可以帮助我使用更新的方法吗?

例子

onBackPressed已弃用

使用案例

我在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

178
推荐指数
9
解决办法
11万
查看次数

getSerializedExtra 和 getParcelableExtra 已弃用。还有什么选择呢?

我已经升级到targetSdkVersion和。compileSdkVersion33

我现在收到警告,告诉我getSerializedExtra(name:)getParcelableExtra(name:)方法已被弃用。

我从Intent类中的文档检查并确认这两种方法确实已被弃用。

该文档建议我改用新的getSerializedExtra(name:clazz:)getParcelableExtra(name:clazz:)方法。

谁能帮助我使用新方法?

警告示例

  1. 收到以下警告时Object

getSerializedExtra_Deprecated_Image

  1. 收到Listor时发出警告ArrayList

getSerializedExtra_Deprecated_List_Image

android android-intent kotlin deprecation-warning android-tiramisu

53
推荐指数
4
解决办法
4万
查看次数

Android API 33 权限未授予

因此,当我在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 runtime-permissions android-tiramisu android-13

22
推荐指数
2
解决办法
6万
查看次数

onBackPressedDispatcher.onBackPressed() 与 backPressedCallback.handleOnBackPressed()

由于从 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

13
推荐指数
1
解决办法
2万
查看次数

地理编码器 - getFromLocation() 已弃用

我收到一条消息,表明此函数(或其构造函数)已被弃用。该函数有一个新的构造函数,它接受附加参数'Geocoder.GeocodeListener listener',但该新构造函数需要 API 级别 33 及以上。对于较低的API级别我应该做什么,解决方案是什么?

在此输入图像描述

android geocoding kotlin deprecation-warning android-tiramisu

11
推荐指数
3
解决办法
1万
查看次数

Android Kotlin Geocoder 获取位置坐标/地址时在 Android 上 DEADLINE_EXCEEDED

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)

坠机原因是什么。我怎样才能避免它?

android geocoder android-tiramisu

11
推荐指数
1
解决办法
949
查看次数

getApplicationInfo(String,int) 已弃用,替代方案是什么?

我已经将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

9
推荐指数
1
解决办法
5176
查看次数

当我尝试设置 Android 13 SDK 时出现“不支持的值: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

7
推荐指数
1
解决办法
6348
查看次数

阻止合并 AD_ID 权限是否会影响 Firebase 功能?

因此,我们正要提交我们的应用程序进行审核,但我们被 Google 对针对 Android 13 及更高版本的应用程序的新要求阻止了,该要求基本上告诉开发人员AD_ID在其应用程序中披露权限的目的。问题是,我们的应用程序没有显式声明AD_ID权限,但事实证明某些 play-services 库或 Firebase 使用了它,因此它已合并到我们应用程序的清单中。

因此,我找到了一些解决方案,以便库声明的权限不会合并到应用程序的清单中,但我担心我们的应用程序依赖于 Firebase 的功能可能会停止工作。有人遇到过这种情况吗?

google-play firebase android-permissions android-tiramisu android-13

6
推荐指数
1
解决办法
2766
查看次数

无法将应用程序安装到使用 targetSdkVersion:Tiramisu 指定的设备 - Android

我目前正在 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 android-studio android-tiramisu

5
推荐指数
1
解决办法
882
查看次数