Eclipse IDEでグラフィカルプログラムを作成していて、23のAPIバージョン、minSdkVersion = "11"でコンパイルしています。これはtargetSdkVersion = "16"を維持するために重要です。 自分の活動(DarjActivity)の1つでデバイスカメラを使用する必要があります。すべて正常に動作しますが、Androidのmarshmallow(api 23)の権限をサポートするようにコードを改善しようとしたので、いくつかのエラーが発生したCheck_Permissionクラスが追加されました。その混乱している問題で私を案内してください! ありがとうございます。Android Marshmallowの許可を確認してください
DarjActivityクラス:
private void selectImage() {
final CharSequence[] items = { "camera", "gallery",
"cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(DarjActivity.this);
builder.setTitle("capture photo");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
boolean result=Check_Permission.checkPermission(DarjActivity.this);
if (items[item].equals("camera")) {
// userChoosenTask="Take Photo";
if(result);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
} else if (items[item].equals("gallery")) {
// userChoosenTask="Choose from Library";
if(result);
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);//
startActivityForResult(Intent.createChooser(intent, "select"),2);
} else if (items[item].equals("cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
Check_Permissionクラス:
package com.codegostarNiloo.negar;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
public class Check_Permission {
public static final int MY_PERMISSIONS_REQUEST_CAMERA = 123;
public static boolean checkPermission(final Context context)
{
int currentAPIVersion = Build.VERSION.SDK_INT;
if(Build.VERSION.SDK_INT >= 23)
// if(currentAPIVersion>=Build.VERSION_CODES.M)
{
if (ContextCompat.checkSelfPermission((Activity) context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.CAMERA)) {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
alertBuilder.setCancelable(true);
alertBuilder.setTitle("Check Permission");
alertBuilder.setMessage("pleas let this applicathion to use your device camera");
alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_CAMERA);
}
});
AlertDialog alert = alertBuilder.create();
alert.show();
} else {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
}
return false;
} else {
return true;
}
} else {
return true;
}
}
}
ここCheck_Permissionクラス(checkSelfPermission)、(shouldShowRequestPermissionRationale)及び(requestPermissions)メソッドでエラーが発生します。 それらの最初のパラメータとして、(アクティビティ)コンテキスト、コンテキストコンテキスト、コンテキスト、this.Activity、Activity.this、DarjActivity、extを配置しました。 binフォルダー内のいくつかのandroid-support-v4.jarファイルを更新して置き換えました。
AndroidManifest権限:
<uses-feature android:name="android.hardware.camera"></uses-feature>
<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="ANDROID.PERMISSION.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="16" />
あなたのコードでエラーを無視すると、 'targetSdkVersion'を動かすことを拒否すると、これは無駄になります。実行時アクセス許可は、API 23以上をターゲットにした場合にのみ使用できます。なぜターゲットバージョンを変更できないのですか? –
どのようなエラーが発生しましたか? 0X0nosugar(エラー)@ – 0X0nosugar
より具体的にしてください: 方法checkSelfPermission(活動、String)をタイプに定義されていませんContextCompat は方法shouldShowRequestPermissionRationale(活動、String)をTanis.7x @タイプActivityCompat –