안 드 로 이 드 6.0 실행 시 권한 완벽 한 패 키 징 방법
9027 단어 android6.0권한포장 하 다
여기 서 저 는 간단하게 activity 에서 권한 과 도구 류 봉 투 를 가 져 왔 습 니 다.
어떤 권한 이 금지 되 거나 모든 권한 이 금지 되 었 습 니 다.여기 서 저 는 올레핀 인터페이스 에 가서 설정 하 는 처 리 를 했 습 니 다.
여러 권한 을 켜 려 면 다른 핸드폰 이 표시 하 는 효과 가 다 를 수 있 습 니 다.어떤 핸드폰 은 권한 Dialog 에 권한 을 가 져 올 개 수 를 표시 하지만,어떤 핸드폰 은 몇 개의 권한 이 필요 한 지 몇 개 를 표시 합 니 다.
마지막 처리:어떤 권한 이 금지 되 어 있 으 면 설정 인터페이스 에서 사용자 에 게 권한 을 열 라 고 알려 줍 니 다.
부분 코드:
/**
* : activity </br>
* :http://blog.csdn.net/androidstarjack
* @author
* @version 1.0 </p> :</br> :</br>
*/
public class CheckPermissionOnActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checkpermission1);
ButterKnife.bind(this);
}
@OnClick({R.id.btn_runtimne_onClick, R.id.btn_runtimne_onClick_multify,R.id.btn_runtimne_onClick_seting})
public void onMyListener(View v){
switch (v.getId()){
case R.id.btn_runtimne_onClick:
requestToUserPersiom(1);
break;
case R.id.btn_runtimne_onClick_multify:
requestToUserPersiom(2);
break;
case R.id.btn_runtimne_onClick_seting:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:"+ getPackageName()));
startActivity(intent);
break;
}
}
public void requestToUserPersiom(int permisionIndexCount){
switch (permisionIndexCount){
case 1:
ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE},100);//
break;
case 2:
case 3:
case 4:
ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE,android.Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
break;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == 100){
if(grantResults.length >0 ){
for (int i = 0; i < grantResults.length; i++) {
if( grantResults[i] == PackageManager.PERMISSION_DENIED){//
return ;
}
}
doosmething();
}
}
}
/**
*
*/
public void doosmething(){
GetToast.useString(CheckPermissionOnActivity.this," ");
}
}
BaseActivitgy 도구 클래스 로 봉 인 됨:
public class BasePermisitionActivity extends Activity {
private static final int REQUESTPERMISSION_CODE = 100;
private static QuestPermissionListener questPermissionListener;
private AlertDialog.Builder builder;
private AlertDialog alertDialog;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityManager.addPermissionActivty(this);
}
public static void requestRuntimePermission(String [] permissions,QuestPermissionListener questPermissionListener){
Activity actyivty = ActivityManager.permissionActivilyList.get(ActivityManager.permissionActivilyList.size() -1);
if(actyivty == null){
return;
}
List<String> neetRequestPermisList = new ArrayList<String>();
for (String permission : permissions) {
if(ActivityCompat.checkSelfPermission(actyivty,permission) == PackageManager.PERMISSION_DENIED){
neetRequestPermisList.add(permission);
}
}
BasePermisitionActivity.questPermissionListener = questPermissionListener;
if(!neetRequestPermisList.isEmpty()){
ActivityCompat.requestPermissions(actyivty,neetRequestPermisList.toArray(new String[neetRequestPermisList.size()]),REQUESTPERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == REQUESTPERMISSION_CODE){
for (int i = 0; i < grantResults.length; i++) {
int granrRequest = grantResults[i];
if(granrRequest == PackageManager.PERMISSION_DENIED){//
if(questPermissionListener != null){
questPermissionListener.denySomePermission();
}
return;
}
}
questPermissionListener.doAllPermissionGrant();
}
}
@Override
protected void onResume() {
super.onResume();
}
public void onResumeCheckPermission(String ...permission){
if(PermisionControl.lackMissPermission(this,permission)){
showMissPermissionDialog();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityManager.removePermissionActiivty(this);
}
/**
* ,
*/
public void showMissPermissionDialog() {
if (builder == null) {
builder = new AlertDialog.Builder(BasePermisitionActivity.this);
builder.setTitle(" ");
String msg = " 。<br>\r \" \"-\" \"- 。<br>\r\r , 。";
builder.setMessage(Html.fromHtml(msg));
//materialDialog.setMovementMethod(LinkMovementMethod.getInstance());
builder.setPositiveButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
builder.setNegativeButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
startAppSettings();
}
});
alertDialog = builder.create();
alertDialog.show();
} else {
alertDialog.show();
}
}
//
public void startAppSettings() {
try {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:"+ getPackageName()));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
관련 도구 클래스:
/**
* :6.0 </br>
* permission </br>
* :http://blog.csdn.net/androidstarjack
* @author
* Created on 2017/1/3/002
* @version 1.0 </p> :</br> :</br>
*/
public class PermisionControl {
/**
*
*/
public static boolean lackMissPermission(Context cnt ,String... permission){
boolean relust = true ;
for (String per : permission) {
if(ActivityCompat.checkSelfPermission(cnt,per) == PackageManager.PERMISSION_DENIED){
relust = false ;
break;
}
}
return relust;
}
/**
*
* eg:
*/
public void requestRuntimePermission(QuestPermissionListener questPermissionListener, String... permissions){
BasePermisitionActivity.requestRuntimePermission(permissions,questPermissionListener);
}
}
그리고 다른 포장:
public class PermissionUsage {
/********** : , , ********/
public static String[] LOACATION_CAMERA = { Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE,
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_EXTERNAL_STORAGE};
/********** : ********/
public static String[] READ_EXTRASORE = { Manifest.permission.READ_EXTERNAL_STORAGE};
/********** : ********/
public static String[] RCALL_PHONE = { Manifest.permission.READ_EXTERNAL_STORAGE};
}
이상 의 안 드 로 이 드 6.0 이 실 행 될 때 권한 이 완벽 하 게 패 키 징 되 는 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【PowerShell】Set-ExecutionPolicy RemoteSigned하면 "레지스트리 키 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\Shell Ids\Microsoft.PowerShell'에 대한 액세스가 거부되었습니다.""Set-ExecutionPolicy-RemoteSigned"에서 실행 정책을 변경하려고하면 아래 오류가 발생했습니다. "기본 (LocalMachine) 범위 실행 정책을 변경하려면 관리자 권한으로 실행 옵션을 사용...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.