【问题标题】:error in permission for flashlight app手电筒应用程序权限错误
【发布时间】:2018-01-11 03:52:12
【问题描述】:

我设法在棒棒糖设备上运行,在清单上添加了权限,但对于 marshamellow,它没有解决用于 jst 冻结 n 的应用程序在尝试打开 flash 时什么也不做

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    Button button;
    private Camera camera;
    private boolean isFlashOn;
    private boolean hasFlash;
    Parameters params;

    private Context mContext = MainActivity.this;

    private static final int REQUEST = 112;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final ImageButton imgbutton = (ImageButton)findViewById(R.id.imageButton);


        hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

        checkPermission();

        //getCamera();


             imgbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (isFlashOn) {
                    turnOffFlash();

                    Toast.makeText(MainActivity.this, "Flash OFF!", Toast.LENGTH_SHORT).show();
                    imgbutton.setImageResource(R.drawable.light_off);

                } else {
                    turnOnFlash();

                    Toast.makeText(MainActivity.this, "Flash ON!", Toast.LENGTH_SHORT).show();
                    imgbutton.setImageResource(R.drawable.light_on);
                }

            }
        });
    }

    public void checkPermission() {
        if (Build.VERSION.SDK_INT >= 23) {
            String[] PERMISSIONS = {android.Manifest.permission.CAMERA};
            if (!hasPermissions(mContext, PERMISSIONS)) {
                ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST);
            } else {
                getCamera() ;
            }
        } else {
            getCamera() ;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    getCamera() ;
                } else {
                    Toast.makeText(mContext, "The app was not allowed to access camera", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

    private static boolean hasPermissions(Context context, String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }


    private void getCamera() {

        if (camera == null) {
            try {
                camera = Camera.open();
                params = camera.getParameters();
            }catch (Exception e) {

            }
        }

        }

    private void turnOnFlash() {

        if(!isFlashOn) {
            if(camera == null || params == null) {
                return;
            }

            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_TORCH);
            camera.setParameters(params);
            camera.startPreview();
            isFlashOn = true;
        }

    }

    private void turnOffFlash() {

        if (isFlashOn) {
            if (camera == null || params == null) {
                return;
            }

            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
            isFlashOn = false;
        }
    }

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

    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(hasFlash)
            turnOnFlash();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}

更新:最后我设法获得了 marshamello 设备的大许可.. 需要以编程方式在 marshamello n 上获得许可,所以这就是我通过这个社区解决的问题,谢谢

【问题讨论】:

  • 您还需要添加此权限。

标签: android permissions flashlight


【解决方案1】:
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    Button button;
    private Camera camera;
    private boolean isFlashOn;
    private boolean hasFlash;
    Parameters params;

    private Context mContext = MainActivity.this;

    private static final int REQUEST = 112;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final ImageButton imgbutton = (ImageButton)findViewById(R.id.imageButton);


        hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

        checkPermission();

        //getCamera();


             imgbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (isFlashOn) {
                    turnOffFlash();

                    Toast.makeText(MainActivity.this, "Flash OFF!", Toast.LENGTH_SHORT).show();
                    imgbutton.setImageResource(R.drawable.light_off);

                } else {
                    turnOnFlash();

                    Toast.makeText(MainActivity.this, "Flash ON!", Toast.LENGTH_SHORT).show();
                    imgbutton.setImageResource(R.drawable.light_on);
                }

            }
        });
    }

    public void checkPermission() {
        if (Build.VERSION.SDK_INT >= 23) {
            String[] PERMISSIONS = {android.Manifest.permission.CAMERA};
            if (!hasPermissions(mContext, PERMISSIONS)) {
                ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST);
            } else {
                getCamera() ;
            }
        } else {
            getCamera() ;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    getCamera() ;
                } else {
                    Toast.makeText(mContext, "The app was not allowed to access camera", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

    private static boolean hasPermissions(Context context, String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }


    private void getCamera() {

        if (camera == null) {
            try {
                camera = Camera.open();
                params = camera.getParameters();
            }catch (Exception e) {

            }
        }

        }

    private void turnOnFlash() {

        if(!isFlashOn) {
            if(camera == null || params == null) {
                return;
            }

            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_TORCH);
            camera.setParameters(params);
            camera.startPreview();
            isFlashOn = true;
        }

    }

    private void turnOffFlash() {

        if (isFlashOn) {
            if (camera == null || params == null) {
                return;
            }

            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
            isFlashOn = false;
        }
    }

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

    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(hasFlash)
            turnOnFlash();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}

【讨论】:

  • 感谢您的反馈,我已经进行了更改,我更新了代码,但出现枚举预期错误
  • getCamera() 权限授予后调用方法。检查修改后的代码
  • @JasbinKarki 嘿抱歉,我已经编辑了您的代码...请再次添加您的原始问题
  • @user2015187 再次感谢您的宝贵反馈,我设法修复了权限:-) 现在应用程序正在运行
【解决方案2】:

试试这个

 if(checkSelfPermission(Manifest.permission.FLASHLIGHT) != PackageManager.PERMISSION_GRANTED ||
checkSelfPermission(Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED ))

【讨论】:

    【解决方案3】:
    You need to add following permissions:
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.FLASHLIGHT"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    

    【讨论】:

      【解决方案4】:

      将以下内容添加到清单中。添加活动只要求相机 权限。

      阅读enter link description here

      <uses-permission android:name="android.permission.CAMERA"/>
       <uses-feature
              android:name="android.hardware.camera"
              android:required="true"/>
          <uses-feature
              android:name="android.hardware.camera.autofocus"
              android:required="false"/>
          <uses-feature
              android:name="android.hardware.camera.flash"
              android:required="false"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-17
        • 2016-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多