この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、記事の最後で紹介します)
デフォルトのビルドで検出できない非推奨APIに対応する
アロマオイルを焚くとリラックスできます♪
ポイント
新しいAndoird(OS)のバージョンに対応する場合、compileSdkVersionを上げてビルドを行います。
デフォルトのビルドでは、新しいバージョンで非推奨になったAPIがソースに含まれていても検出されません。
非推奨とは将来的に廃止予定、バージョン間で互換性がないなど、対処を推奨することを意味しています。
MediaStore.Images.Media.getBitmap
非推奨APIのチェック
プロジェクトのbuild.gradleファイルに以下の記述を追加します。
ビルド時に非推奨APIの警告が表示されるようになります。
:
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile).tap {
configureEach {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
}
:
非推奨APIの対応
非推奨APIの対応としては、新しいAPI(代替え)が用意されていることがほとんどです。
新しいAPIに置換する、OSバージョンを条件にAPIを切り替えて新しいAPIを使用するようにします。
OSバージョンを条件にAPIを切り替えて新しいAPIを使用する場合、非推奨APIがソースに含まれたままです。
このため、非推奨APIのチェックでは非推奨APIの警告は消えません(笑)
非推奨APIの対応をいくつか紹介します。
ケース① 非推奨API
MediaStore.Images.Media.getBitmapはAndroid10(API level 29)で非推奨になりました。
新しいAPI(ImageDecoder)に置換する必要があります。
:
@RequiresApi(api = Build.VERSION_CODES.P)
private static class CustomOnHeaderDecodedListener implements ImageDecoder.OnHeaderDecodedListener {
@Override
public void onHeaderDecoded(@NonNull ImageDecoder imageDecoder, @NonNull ImageDecoder.ImageInfo imageInfo, @NonNull ImageDecoder.Source source) {
imageDecoder.setMutableRequired(true);
}
}
:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(context.getContentResolver(), uri), new CustomOnHeaderDecodedListener());
} else {
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
}
:
OnHeaderDecodedListenerのカスタムクラスでmutableなBitmapを取得します。
ケース② 非推奨API
setSystemUiVisibilityはAndroid11(API level 30)で非推奨になりました。
新しいAPI(WindowInsetsController)に置換する必要があります。
:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
WindowInsetsController windowInsetsController = getWindow().getDecorView().getWindowInsetsController();
if (windowInsetsController != null) {
windowInsetsController.hide(WindowInsets.Type.statusBars());
windowInsetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
}
} else {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
:
ステータスバーを非表示にします。
ケース③ 引数が異なる
Android10(API level 29)以上と以下でmoveTaskToFrontの引数が変更になりました。
:
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> appTasks = activityManager.getAppTasks();
if (!appTasks.isEmpty()) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
activityManager.moveTaskToFront(appTasks.get(0).getTaskInfo().taskId, 0);
} else {
activityManager.moveTaskToFront(appTasks.get(0).getTaskInfo().id, 0);
}
}
:
待機しているTaskを再開します。
今回は、ここまでです。
デフォルトのビルドで検出できない非推奨APIに対応しているAndroidアプリです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。
未経験者からシステムエンジニアを目指すのに最適です。まずは無料相談から♪

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪
コメント欄