Cameraクラスを使用する場合、公式APIに従って作成しましたが、フラッシュバックして最初にnullポインターを報告しました。ソースに戻ると、カメラはインスタンス化されていませんが、すでにCamera.open()があります。!それ以来、コードをもう一度確認したところ、問題は見つかりませんでした。そして、権限も割り当てられます!ニマ、公式文書は間違っていますか?このとき、万能のバイドゥのことを考えてみたところ 、Android 6.0以降、一種のランタイムパーミッションがあり、カメラも含まれていることがありました。おそらく意味を見たと思います。つまり、メインフェストで割り当てられた権限は、アプリのインストール時には有効になりませんが、実行に変更すると、ユーザーがこの権限を有効にするかどうかを選択するためのダイアログボックスが表示されます。私の電話のAndroidバージョンが数日前に6.0以上にアップグレードされたことをすぐに思い出しました!いきなり〜心の中の1万頭がニマを駆け抜けました!クラッシュの理由:プログラムが操作中にcamera.open()を直接要求したとき、実際にはカメラを操作するための許可を取得していませんでした。
したがって、カメラを起動するときに、判断を追加します。
public void open(View view){
//先判断用户之前是否已经授予过该权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
startActivity(new Intent(this,CaptureActivity.class));
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予权限
startActivity(new Intent(this,CaptureActivity.class));
} else {
// 用户拒绝权限
}
return;
}
}
}
実行中は、実行に関連する権限を開くかどうかが最初にポップアップ表示され、[OK]をクリックして開くと、楽しくプレイできます~~
Android6.0で規定されている危険な権限は次のとおりです。
許可グループ | 権限 |
---|---|
CALENDAR |
|
CAMERA |
|
CONTACTS |
|
LOCATION |
|
MICROPHONE |
|
PHONE |
|
SENSORS |
|
SMS |
|
STORAGE |