it-swarm-id.com

Gagal terhubung ke layanan kamera

Saya mencoba mengakses kamera di ponsel saya. Saya sedang menulis aplikasi rintisan sederhana sebelum memasukkan kode ke dalam widget. Saya tidak terlalu jauh. Kode selalu melempar pengecualian runtime "gagal terhubung ke layanan kamera" Kode (dicubit dari contoh commonsware) yang salah adalah:

    @Override
    public void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Gingerbread) {
            Camera.CameraInfo info = new Camera.CameraInfo();
            for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
                Camera.getCameraInfo(i, info);
                if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                    try {
                        // Gets to here OK
                        camera = Camera.open(i);
                    } catch (Exception e) {
                        e.printStackTrace();
                        //  throws runtime exception :"Failed to connect to camera service"
                    }
                }
            }
        }
}

dan manifes saya adalah (dikoreksi 20 Oktober):

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.nbt.cameratest"
    Android:versionCode="1"
    Android:versionName="1.0" >
    <uses-sdk Android:minSdkVersion="9" />
    <application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name" >
        <activity
            Android:label="@string/app_name"
            Android:name=".CameraTestActivity" >
            <intent-filter >
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

            <uses-permission Android:name="Android.permission.CAMERA" />
            <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    </application>
</manifest>

Adakah yang bisa menyarankan apa yang salah?

PEMBARUAN 20 Oktober

Logcat di SDK 4.0 rusak dan tidak akan menampilkan akhir log, jadi saya telah memotong bit ini sebaik mungkin dari baris perintah adb logcat:

W/ServiceManager( 2588): Permission failure: Android.permission.CAMERA from uid=10136 pid=5744
E/CameraService( 2588): Permission Denial: can't use the camera pid=5744, uid=10136
W/System.err( 5744): Java.lang.RuntimeException: Fail to connect to camera service
W/System.err( 5744):    at Android.hardware.Camera.native_setup(Native Method)
W/System.err( 5744):    at Android.hardware.Camera.<init>(Camera.Java:294)
W/System.err( 5744):    at Android.hardware.Camera.open(Camera.Java:255)
etc..

Saya tidak tahu mengapa saya tidak memiliki izin seperti yang dinyatakan dalam manifes

50
NickT

Beberapa hal:

  1. Mengapa tag izin-penggunaan dan fitur-penggunaan Anda digunakan dalam tag aktivitas Anda. Umumnya, izin dimasukkan sebagai anak-anak langsung dari tag <manifest> Anda. Ini bisa menjadi bagian dari masalah.

  2. Menurut Android dokumentasi terbuka kamera , pengecualian runtime dilemparkan:

    jika koneksi ke layanan kamera gagal (misalnya, jika kamera sedang digunakan oleh proses lain atau manajer kebijakan perangkat telah menonaktifkan kamera)

    Sudahkah Anda mencoba memeriksa apakah kamera sedang digunakan oleh sesuatu yang lain atau jika manajer kebijakan Anda memiliki pengaturan di mana kamera dimatikan?

  3. Jangan lupa <uses-feature Android:name="Android.hardware.camera.autofocus" /> Untuk fokus otomatis.

Meskipun saya tidak yakin apakah semua ini akan membantu Anda secara langsung, saya pikir mereka layak diselidiki jika tidak ada alasan lain selain sekadar mengesampingkan. Uji tuntas jika Anda mau.

EDIT Seperti disebutkan dalam komentar di bawah, solusinya adalah dengan memindahkan uses-permissions Ke atas tag aplikasi.

54
Kurtis Nusbaum

Untuk versi Android yang lebih baru yang mendukung izin pengaturan per aplikasi (sejak Marshmallow, 6.0) izin untuk kamera dapat dinonaktifkan dan harus diaktifkan dari pengaturan aplikasi.

37
sam

Pastikan untuk memanggil metode release () untuk melepaskan kamera ketika tidak lagi diperlukan, atau Anda tidak akan dapat menggunakan kamera. Mungkin sebagai pemeriksaan kewarasan, lihat apakah kamera biasa Anda berfungsi. Jika dikatakan gagal, maka upaya Anda sebelumnya di runni

24
Ginzorf

Masalahnya terkait dengan izin. Salin kode berikut ke metode onCreate (). Masalah akan terpecahkan.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[] {Manifest.permission.CAMERA}, 1);
    }
}

Setelah itu tunggu tindakan pengguna dan tangani keputusannya.

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case CAMERA_PERMISSION_REQUEST_CODE:
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //Start your camera handling here
            } else {
                AppUtils.showUserMessage("You declined to allow the app to access your camera", this);
            }
    }
}
10
Rohit Deshmukh

Saya tahu pertanyaan ini sudah lama dijawab, tetapi saya ingin menambahkan hal kecil.

Untuk semua orang yang memiliki kesalahan yang sama, pastikan untuk menambahkan izin ini di file manifes Anda:

<uses-permission Android:name="Android.permission.CAMERA" />

[~ # ~] penting [~ # ~] untuk menggunakan huruf MODAL untuk CAMERA, seperti Saya mendapat izin dengan surat-surat kecil dan itu tidak berhasil.

6
Apostrofix

menjalankan kode Anda ratusan kali dapat memengaruhi fungsi kamera secara salah. Aktivitas Anda mungkin berkinerja dengan baik tetapi sistem tidak dapat membelinya. Jadi, kekuatan kamera berhenti. Satu tip utama yang terlewatkan adalah me-reboot ponsel Anda dan bukan hanya Eclipse..Berfungsi untuk saya ..

2
minesh..

Saya datang dengan masalah yang sama dan saya berbagi bagaimana saya memperbaikinya. Mungkin membantu beberapa orang.

Pertama, periksa versi Android. Jika berjalan pada Android 6.0 dan highe r (API level 23+) , maka Anda perlu:

  1. Nyatakan izin di aplikasi manifes . Pastikan untuk memasukkan izin di atas tag aplikasi.
**<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />**

<application ...>
    ...
</application>
  1. Kemudian, minta agar pengguna menyetujui setiap izin saat runtime

      if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED) {
    // here, Permission is not granted
    ActivityCompat.requestPermissions(this, new String[] {Android.Manifest.permission.CAMERA}, 50);
    }
    

Untuk informasi lebih lanjut, lihat dokumentasi API di sini

1
Moctar Haiz

karena pertanyaan ini ditanyakan 4 tahun yang lalu..dan saya tidak menyadari bahwa kecuali disebutkan oleh Penanya..ketika tidak ada dukungan izin Run time.

tetapi berharap bermanfaat bagi pengguna yang masih terjebak dalam situasi ini .. Lihat Izin Waktu Berlak , untuk saya itu memecahkan masalah ketika saya menambahkan izin Run time untuk memberikan akses kamera. Atau Anda dapat memberikan izin ke aplikasi secara manual dengan masuk ke pengaturan seluler Anda => Aplikasi => (pilih aplikasi Anda) => Bagian Izin di bagian yang muncul jendela dan aktifkan/nonaktifkan izin yang diinginkan. semoga ini berhasil.

1
Muahmmad Tayyib

saat Anda menggunakan camera.open; dan Anda selesai menggunakan kamera tulis ini commend camera.release (); ini akan menghentikan kamera sehingga Anda dapat menggunakannya lagi

0
hussein kalash