2016-12-16 164 views
0

我想構建一個應用程序,可以打開和關閉設備的相機閃光燈。在代碼中,它沒有顯示任何錯誤,但在我的設備上啓動應用程序時,它開始崩潰。 報告錯誤顯示一些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> 

主要活動的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

張貼您的主要文件 –

+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(棉花糖)或以上,請檢查權限按照此啓用與否:

攝像機的權限可能會被禁用,應該從應用程序設置中啓用。設置 - >應用程序 - > [您的應用程序] - >權限。

這就是爲我工作。希望這有助於你太:)

編輯 並請使用e.printstacktrace()catch塊得到錯誤的logcat。

0

我覺得釋放相機時出現問題。由於您已在onStop中編寫releasemethod,因此只有當應用程序關閉時,您的相機纔會獲得發行版。當您關閉按鈕click method中的閃光燈時,請嘗試使用release相機。

+0

我做到了,但..無法解決 –

0

我得到了我錯在哪裏。上面寫的代碼是正確的。唯一的問題,我使用棉花糖,我們必須通過設備獲得相機許可。