Android XXPermissions 1行のコードは動的権限の取得を完了します


まずXXPermissionsフレームワークアドレスを添付します.https://github.com/getActivity/XXPermissions
XXPermissionsフレームワークは確かに簡単で速いです.私はXXPermissionsフレームワークの便利な基礎の上で、また簡単にカプセル化しました.多くのappが初期化時にすべての危険権限を尋ねるのに適しています.呼び出しタイミングが初期化されたとき、危険な権限が必要なメソッドが呼び出されていない場合、具体的な方法は次のとおりです.
public class NBPermission {
	private static Activity sContext;
	private static final String TAG = "NBSDKPermission";
	private static boolean isOpenTs = false;//         

	/**
	 *     
	 * @param context
	 * @param isAsk           
	 * @param permissions
	 */
	public static void getPermission(Context context,boolean isAsk,String... permissions){
		sContext = (Activity)context;
		if(!isAsk)return;
		try {
			if (XXPermissions.isHasPermission(context, permissions)) 
			{
				NBUtils.log(TAG, "          ");
				if (isOpenTs) {
					Toast.makeText(sContext, "          ", Toast.LENGTH_SHORT).show();
				}
			}else {
				XXPermissions.with((Activity)context).permission(permissions).request(new OnPermission() {
							@Override
							public void noPermission(List denied, boolean quick) {
								if (quick) {
									NBUtils.log(TAG, "       ");
									if (isOpenTs) {
										Toast.makeText(sContext, "       ", Toast.LENGTH_SHORT).show();
									}
								}else {
									NBUtils.log(TAG, "      ");
									if (isOpenTs) {
										Toast.makeText(sContext, "      ", Toast.LENGTH_SHORT).show();
									}
								}
							}
							@Override
							public void hasPermission(List granted, boolean isAll) {
								if (isAll) {
									NBUtils.log(TAG, "      ");
									if (isOpenTs) {
										Toast.makeText(sContext, "      ", Toast.LENGTH_SHORT).show();
									}
								}else {
									NBUtils.log(TAG, "         ");
									if (isOpenTs) {
										Toast.makeText(sContext, "         ", Toast.LENGTH_SHORT).show();
									}
								}
							}
						});
			}
		} catch (Exception e) {
			NBUtils.log(TAG, "          ,           ,    :"+e.toString());
			if (isOpenTs) {
				Toast.makeText(sContext, "          ,           ,    :"+e.toString(), Toast.LENGTH_SHORT).show();
			}
		}
	}

	/**
	 *     
	 * @param context
	 * @param isAsk           
	 * @param isOpenGudie        ,           ,      
	 * @param isOpenGudieForce                
	 * @param title    dialog   title.  :      
	 * @param message    dialog          ,  :                ,               ?
	 * @param okButMessage          
	 * @param noButMessage          
	 * @param permissions
	 */
	public static void getPermission(Context context,boolean isAsk,final boolean isOpenGudie,final boolean isOpenGudieForce,final String title,final String message,final String okButMessage,final String noButMessage,String... permissions){
		sContext = (Activity)context;
		if(!isAsk)return;
		try {
			if (XXPermissions.isHasPermission(context, permissions)) 
			{
				NBUtils.log(TAG, "          ");
			}else {
				XXPermissions.with((Activity)context).permission(permissions).request(new OnPermission() {
							@Override
							public void noPermission(List denied, boolean quick) {
								if (quick) {
									NBUtils.log(TAG, "       ,       ");
									if (isOpenTs) {
										Toast.makeText(sContext, "       ,       ", Toast.LENGTH_SHORT).show();
									}
									//                      
									if(isOpenGudie) {
										final AlertDialog.Builder normalDialog = 
												new AlertDialog.Builder(sContext);
										if(title != null && !title.equals(""))normalDialog.setTitle(title);
										if(message != null && !message.equals(""))normalDialog.setMessage(message);
										if(okButMessage != null){
											normalDialog.setPositiveButton(okButMessage.equals("")?"  ":okButMessage, new OnClickListener() {
												public void onClick(DialogInterface arg0, int arg1) {
													XXPermissions.gotoPermissionSettings(sContext);
												}
											});
										}

										if(noButMessage != null){
											if (!isOpenGudieForce) {
												normalDialog.setNegativeButton(noButMessage.equals("")?"   ":noButMessage, new OnClickListener() {
													public void onClick(DialogInterface arg0, int arg1) {
													}
												});
											}
										}
										normalDialog.show();
									}
								}else {
									NBUtils.log(TAG, "      ");
									if (isOpenTs) {
										Toast.makeText(sContext, "      ", Toast.LENGTH_SHORT).show();
									}
								}
							}
							@Override
							public void hasPermission(List granted, boolean isAll) {
								if (isAll) {
									NBUtils.log(TAG, "      ");
									if (isOpenTs) {
										Toast.makeText(sContext, "      ", Toast.LENGTH_SHORT).show();
									}
								}else {
									NBUtils.log(TAG, "         ");
									if (isOpenTs) {
										Toast.makeText(sContext, "         ", Toast.LENGTH_SHORT).show();
									}
								}
							}
						});
			}
		} catch (Exception e) {
			NBUtils.log(TAG, "          ,           ,    :"+e.toString());
			if (isOpenTs) {
				Toast.makeText(sContext, "          ,           ,    :"+e.toString(), Toast.LENGTH_SHORT).show();
			}
		}
	}
}

次の操作を行います.
//1.       ,     

//    ,          
NBPermission.getPermission(Context context,boolean isAsk,String... permissions)
//  ,       ,     :
NBPermission.getPermission(context,true,Permission.READ_PHONE_STATE,Permission.WRITE_EXTERNAL_STORAGE);

//2.              ,      ,           

NBPermission.getPermission(Context context,boolean isAsk,final boolean isOpenGudie,final boolean isOpenGudieForce,final String title,final String message,final String okButMessage,final String noButMessage,String... permissions)

基本機能:
//      
if (XXPermissions.isHasPermission(this, Permission.Group.STORAGE)) {
	
}
//       
XXPermissions.gotoPermissionSettings(this);

このように简単で、问题があってみんなに指摘することを望んで、意见があってみんなに指导することを望んで、ありがとうございます!転載、写しが必要な場合は、出典を明記してください.ありがとうございます.