2016-12-16 3 views
0

Я пытаюсь создать приложение, которое может включать и выключать камеру со вспышкой моего устройства. В Code он не показывает никаких ошибок, но при запуске приложения на моем устройстве он начинает сбой. Сообщить об ошибке показывает Unable to start activity и что-то вроде Fail to connect Camera Services. Поскольку я новичок в разработке Android и не располагаю достаточными знаниями. Я уже видел несколько вопросов относительно этого, но не смог найти полезную информацию. Все ответы приблизительно предлагали добавить с помощью разрешения в файл манифеста, который я уже сделал.Android: не удается начать работу/Не удается подключиться к службе камеры

содержание файла манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.joshiyogesh.flashlight"> 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <uses-feature android:name="android.hardware.camera"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

содержание Main-активности Java:

package com.example.joshiyogesh.flashlight; 

import android.content.pm.PackageManager; 
import android.graphics.Color; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    Button btn; 
    android.hardware.Camera camera; 
    Camera.Parameters parameters; 
    boolean isFlash = false; 
    boolean isOn = false; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn = (Button)findViewById(R.id.button2); 
     if(getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) 
     { 
      camera = Camera.open(); 
      parameters = camera.getParameters(); 
      isFlash = true; 
     } 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      if(isFlash){ 
       if(!isOn){ 
        btn.setText("Off"); 
        btn.setBackgroundColor(Color.GREEN); 
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
        camera.setParameters(parameters); 
        camera.startPreview(); 
        isOn = true; 
       } 
       else{ 
        btn.setText("ON"); 
        btn.setBackgroundColor(Color.RED); 
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
        camera.setParameters(parameters); 
        camera.stopPreview(); 
        isOn = false; 
       } 
      } 

      else{ 
       Toast.makeText(MainActivity.this,"Camera Not detecting",Toast.LENGTH_LONG).show(); 

      } 

      } 
     }); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if(camera!=null){ 
      camera.release(); 
      camera = null; 
     } 
    } 
} 

I have uploaded image of report bug of my mobile device

+0

Вам нужно отправить ответ в виде изображения? –

+0

напишите свой файл mainfest –

+0

Убедитесь, что вы написали его правильно http://stackoverflow.com/a/26842715/5156075 –

ответ

0

Я отправляю код, чтобы открыть камеру, пожалуйста, внесите изменения в соответствии с вашими потребностями.

попробовать это:

static Camera camera = null; 

и объявить следующее:

try{ 
if(clickOn == true) { 
    clickOn = false; 
    camera = Camera.open(); 
    Parameters parameters = camera.getParameters(); 
    parameters.setFlashMode(Parameters.FLASH_MODE_TORCH); 
    camera.setParameters(parameters); 
    camera.startPreview(); 

    remoteViews.setViewVisibility(R.id.button1, View.GONE); 
    remoteViews.setViewVisibility(R.id.button2, View.VISIBLE); 
    localAppWidgetManager.updateAppWidget(componentName, remoteViews); 
    } else { 
    clickOn = true; 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 

    remoteViews.setViewVisibility(R.id.button1, View.VISIBLE); 
    remoteViews.setViewVisibility(R.id.button2, View.GONE); 
    localAppWidgetManager.updateAppWidget(componentName, remoteViews); 
}  
} catch(Exception e) { 
    Log.e("Error", ""+e); 
} 

После использования камеры Не забудьте выпустить его следующее заявление:

camera.release(); 

Также это может случиться так, что вашему приложению не будет разрешено открывать камеру во время выполнения. Потому что из android 6.0 необходимо иметь разрешение времени выполнения для выполнения определенных задач.

Так что, если вы используете Android 6.0 (Зефир) или выше, пожалуйста, проверьте, что разрешение включен или нет после этого:

Разрешение для камеры может быть отключен и должен быть включен в настройках приложения. Настройки -> Приложения -> [Ваше приложение] -> Разрешения.

Это то, что сработало для меня. Надеюсь, это поможет вам тоже :)

EDIT И, пожалуйста, используйте e.printstacktrace() в вашем catch блоке, чтобы получить LogCat ошибки.

0

Я думаю, что есть проблема при выпуске камеры. Поскольку вы написали releasemethod в onStop, ваша камера получит освобождение только тогда, когда приложение будет закрыто. попробуйте установить release камеру, когда вы выключаете вспышку в кнопке click method.

+0

Я сделал это, но .. пока не смог решить –

0

У меня там, где я был неправ. Коды, написанные выше, правы. Единственная проблема, я использовал зефир, в котором мы должны дать разрешение на получение разрешения камеры через устройство.

Смежные вопросы