1. 程式人生 > >Android動態許可權申請庫

Android動態許可權申請庫

第一次封裝庫,有問題歡迎提出來,哈哈哈^_^

Android6.0之後就要求敏感許可權動態申請,網上也有很多大佬封裝的庫,本人也沒研究。本著自娛自樂的精神,寫了一個。若有不完善需要改進的地方,歡迎大家提出,我也希望借鑑下不同的思想。本人菜鳥一枚,請包涵!!!

先上效果圖:

這裡給出github地址

下面貼出使用的核心程式碼:

1.在專案的build.gradle裡邊新增倉庫地址

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

2.在專案moudle的build.gradle裡邊新增依賴

dependencies {
    compile 'com.github.15827348069:GMPermission:28dbfd9c24'
}

3.在要申請許可權的地方如下使用:

//申請權所需要的物件
mGmPermissions = GMPermissions.instance().setParameter(this, this, PermissionC.WR_FILE_CODE);
mGmPermissions.setPermissionCallBackExcute(this);

下面貼出demo示例中的程式碼:

public class DemoActivity_01 extends AppCompatActivity implements GMPermissions.PermissionCallBackExcute {
    private ImageView mShowIv;

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

        Button selectImgBtn = findViewById(R.id.selectImgBtn);
        mShowIv = findViewById(R.id.showIv);

        //獲取申請許可權的物件
        GMPermissions gmPermissions = GMPermissions.instance();
        gmPermissions.setPermissionCallBackExcute(this);

        selectImgBtn.setOnClickListener(v -> {
            //檢查許可權,沒有則申請許可權   --->從Android 4.2開始向上相容
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                /**
                 * 例如讀取檔案許可權,將許可權陣列作為引數傳進去
                 */
                GMPermissions.skipPermissionActivity(DemoActivity_01.this,
                        PermissionC.WR_FILES_PERMISSION);
            }
        });


    }

    @Override
    public void excutePermissionCodes() {
        //這裡執行  獲取許可權後的操作

        //選擇圖片
        new GMSelectImg().picImgsOrVideo(this, PermissionC.PIC_IMG_VIDEO_CODE, 1);
    }

    //這是獲取許可權後執行程式碼接受到的結果,需要的也可以封裝進來。這裡不做封裝,只封裝動態許可權請求部分
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //獲取結果
        switch (requestCode) {
            case PermissionC.PIC_IMG_VIDEO_CODE:
                //選擇圖片的結果
                if (resultCode == Activity.RESULT_OK) {
                    List<Uri> mSelected = Matisse.obtainResult(data);
                    //設定選擇的圖片
                    GlideUtil.loadImageWithLocation(DemoActivity_01.this,
                            mSelected.get(0), mShowIv);
                }
                break;
        }
    }
}