136

新しい camera2 API は私を混乱させます。デバイスのカメラを使用するアプリ(Android API 10 - 21 用)を開発したいと考えています。ここで述べたように、「カメラ」API を使用する必要があります。

ただし、「カメラ」API (android.hardware.Camera)をマニフェストのユーザー機能に追加しようとすると、非推奨としてマークされます。一方、「camera2」API (android.hardware.camera2)に変更することはできません。これは、Android API 21 以降 (Android 5 - Lollipop) とのみ互換性があるためです。 2 リンク。

アプリを古いバージョンの Android だけでなく、最新バージョンでも実行したい...

4

7 に答える 7

154

古いカメラ API は非推奨としてマークされていますが、まだ完全に機能しており、かなり長い間機能し続けるでしょう (現在、Play ストアのカメラを使用するほぼすべてのアプリケーションがそれを使用しているため)。

非推奨であるという Android Studio の苦情を無視する必要がありますが、21 より前の Android バージョンをサポートする場合は、古い API を使用する必要があります。

API レベル 21 では、確かに新しい API とその新機能を使用できますが、現在、API を切り替える場合、アプリで完全に別のフローを維持する必要があります。残念ながら、2 つの API の世界観はかなり異なっているため、古いデバイスでも新しい API のようなものを使用できるようにするサポート ライブラリを作成するのは困難です (ライブラリが新しい API から古い API にマップされていない場合)。 API 21 以降)。

于 2015-02-09T19:12:29.040 に答える
39

必要なカメラからのすべてのメソッドをインターフェイスに配置し、次のようなカメラ インスタンスを作成します。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Log.d(TAG, "camera2 selected");
        this.camera = new Camera2(getContext());
    } else {
        Log.d(TAG, "camera1 selected");
        this.camera = new Camera1(getContext());
    }

このようにして、すべてが分割され、人生がとても楽になります。

アドバイス - camera2 との生活はそれほど素晴らしいものではありません。ベンダーは依然としてくだらない実装を行っているため、多くの条件と回避策を追加する必要があります。

例 1 - S6 はフラッシュをサポートしていないと報告します:) 例 2 - LG デバイスはサポートされているイメージ サイズのリストを返します - しかし、それらすべてが実際にサポートされているわけではありません!!

于 2015-09-11T08:54:14.283 に答える
9

必要な API をサポートするには、以下のコードを使用します。APIレベルに対応する適切な名前を決定するだけです。たとえば、API 21 は LOLLIPOP で、API 15 は ICE_CREAM_SANDWICH_MR1 です。

 if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)  
                                    && ((Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP))) {
           // your code here - is between 15-21

 } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
           // your code here - is api 21
 }
于 2014-12-26T13:42:56.103 に答える