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

Ups*_*own 9 navigation android kotlin deprecation-warning android-tiramisu

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

收到错误(无法解析符号“app”)

            dbx.game_id      = String.valueOf(app.metaData.getInt("main_id"));
Run Code Online (Sandbox Code Playgroud)

我创建了局部变量“app”:

            PackageItemInfo app;
            dbx.game_id      = String.valueOf(app.metaData.getInt("main_id"));
Run Code Online (Sandbox Code Playgroud)

收到错误(变量“app”可能尚未初始化)

我初始化变量;我都尝试过:

            PackageItemInfo app = null;
            dbx.game_id      = String.valueOf(app.metaData.getInt("main_id"));
Run Code Online (Sandbox Code Playgroud)

和:

            PackageItemInfo app = new PackageItemInfo();
            dbx.game_id      = String.valueOf(app.metaData.getInt("main_id"));
Run Code Online (Sandbox Code Playgroud)

但我不断收到同样的警告,这次我什至无法在模拟器中运行该应用程序。

Nit*_*ish 8

getApplicationInfo(String packageName,int flags)在 Android Api 33 中已被弃用。
我们需要使用getApplicationInfo(java.lang.String,android.content.pm.PackageManager.ApplicationInfoFlags)

  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);
  }
Run Code Online (Sandbox Code Playgroud)

您可以在 中传递零个或其他组件信息标志的组合ApplicationInfoFlags。更多详细信息请参见ApplicationInfoFlags

编辑:完成 initDbx() 方法

 public void initDbx(){
        try {
            ApplicationInfo app;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
                app = activity.getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.ApplicationInfoFlags.of(0));
            }else{
                 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();
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)