スタック・オーバーフロー Asked on December 7, 2021
カメラアプリを開発中のものです。
カメラから取得される映像をSurfaceView上に表示したいのですが、できません。
写経して試そうとしても、タイトル通りの「open」が赤字のままです。
それ以外にも「release」や「setPreviewDisplay」なども赤字です(カメラを使用するには必要な部分?)
importで、android.hardware.Camera(若しくはCamera2)を使用したいのですが、できません。 使うと横線が引かれます。
なにがいけないのかさっぱりわかりません。教えていただけますか?
以下がコードです。
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraDevice;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
public static CameraDevice getCametaInstance(){
CameraDevice c = null;
try {
c = CameraDevice.open(); // attempt to get a Camera instance
}
catch (Exception e){
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
新しい android.hardware.camera2.CameraDevice クラスにはopen()
メソッドは存在しません。
古い android.hardware.Camera クラスにはopen()
メソッドが存在しますが、このクラス自体がAPIレベル21 (Android 5.0) 以降で廃止予定 (deprecated) となっています。
以下のリファレンス先頭の「注」を参照してください。
Android 5.0 以降をターゲットにする場合、新しいCamera2 APIを使用する必要があります。
Android 4.x 以前を今からサポートしようとするのは全く推奨できませんが、もしどうしても Android 4.x 以前もターゲットにしたい理由があるのであれば、Android OSのバージョンの差異を吸収してくれる互換ライブラリの androidx.camera を使う方法もあります。ただしandroidx.camera
は2020年7月現時点でまだベータ版です。
Androidは仕様変更やAPIセットの廃止・入れ替えが激しいOSなので、内容がすぐに陳腐化する安価な書籍類は参考にしないほうがよいです。
(陳腐化しないのはAndroidカーネルの内部を解説するような、ごく一部の書籍に限られます)
Answered by sygh on December 7, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP