Skip to content

Commit 417cd40

Browse files
author
GaoLei
committed
重新封装PermissionUtil,功能单一原则
1 parent 3668aab commit 417cd40

8 files changed

Lines changed: 182 additions & 94 deletions

File tree

0 Bytes
Binary file not shown.

MVPModel/.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

MVPModel/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ android {
2525

2626
dependencies {
2727
implementation fileTree(dir: 'libs', include: ['*.jar'])
28-
implementation 'com.android.support:appcompat-v7:26+'
28+
implementation 'com.android.support:appcompat-v7:26.1.0'
2929
implementation "com.android.support:design:26+"
3030

3131
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
2.51 MB
Binary file not shown.

MVPModel/app/release/output.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"app-release.apk","properties":{"packageId":"com.gaolei.mvpmodel","split":"","minSdkVersion":"15"}}]

MVPModel/app/src/main/java/com/gaolei/mvpmodel/MainActivity.java

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import android.support.v4.app.FragmentTransaction;
1414
import android.os.Bundle;
1515
import android.support.v4.content.ContextCompat;
16+
import android.support.v7.widget.RecyclerView;
1617
import android.view.MenuItem;
1718
import android.widget.TextView;
1819
import android.widget.Toast;
@@ -35,6 +36,7 @@ public class MainActivity extends BaseActivity {
3536

3637
private ArrayList<BaseMvpFragment> mFragments;
3738
private int mLastFgIndex = 0;
39+
@BindView(R.id.title)
3840
TextView title;
3941
// BottomNavigationView bottomNavigationView;
4042
@BindView(R.id.bottom_navigation_view)
@@ -53,19 +55,11 @@ protected void initData(Bundle bundle) {
5355
// 取消BottomNavigation大于3个时,动画
5456
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
5557
mFragments = new ArrayList<BaseMvpFragment>();
56-
title = findViewById(R.id.title);
5758
mFragments.add(new HomeFragment());
5859
mFragments.add(new KnowledgeFragment());
5960
mFragments.add(new NavigationFragment());
6061
mFragments.add(new ProjectFragment());
61-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
62-
//如果versionCode>=23 则需要动态授权
63-
boolean isAllGranted= PermissionUtil.checkPermission(this);
64-
if(isAllGranted)
65-
switchFragment(0);
66-
} else {
67-
switchFragment(0);
68-
}
62+
requestPermission();
6963

7064
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
7165
@Override
@@ -119,39 +113,24 @@ private void switchFragment(int position) {
119113

120114

121115

122-
/**
123-
* 第 3 步: 申请权限结果返回处理
124-
*/
125-
@Override
126-
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
127-
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
128-
129-
if (requestCode == PermissionUtil.MY_PERMISSION_REQUEST_CODE) {
130-
boolean isAllGranted = true;
131-
// 判断是否所有的权限都已经授予了
132-
for (int grant : grantResults) {
133-
if (grant != PackageManager.PERMISSION_GRANTED) {
134-
isAllGranted = false;
135-
break;
136-
}
137-
}
138-
139-
if (isAllGranted) {
140-
// 如果所有的权限都授予了, 则显示HomeFragment
116+
public void requestPermission(){
117+
requestPermission(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},new PermissionUtil.RequestPermissionCallBack() {
118+
@Override
119+
public void granted() {
120+
// Toast.makeText(MainActivity.this, "获取权限成功,执行正常操作", Toast.LENGTH_LONG).show();
141121
switchFragment(0);
142-
} else {
143-
// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
144-
// PermissionUtil.getAppDetailSettingIntent(this);
145-
// Utils.showToast("App正常使用需要授权" );
146-
PermissionUtil.showRequestPermissionDialog(this);
147-
122+
}
148123

124+
@Override
125+
public void denied() {
126+
// Toast.makeText(MainActivity.this, "获取权限失败,正常功能受到影响", Toast.LENGTH_LONG).show();
149127
}
150-
}
128+
});
151129
}
152-
153-
public void toast(String content) {
154-
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
130+
public void onRestart(){
131+
super.onRestart();
132+
//跳转到设置界面后,重现检查权限
133+
requestPermission();
155134
}
156135

157136

MVPModel/app/src/main/java/com/gaolei/mvpmodel/activity/BaseActivity.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package com.gaolei.mvpmodel.activity;
22

3+
import android.app.Activity;
4+
import android.content.Context;
5+
import android.content.pm.PackageManager;
36
import android.graphics.Color;
47
import android.os.Bundle;
58
import android.os.MemoryFile;
9+
import android.support.annotation.NonNull;
610
import android.support.annotation.Nullable;
11+
import android.support.v4.app.ActivityCompat;
712
import android.support.v4.app.FragmentActivity;
13+
import android.support.v4.content.ContextCompat;
814
import android.support.v7.app.AppCompatActivity;
915
import android.view.LayoutInflater;
1016
import android.view.View;
@@ -14,6 +20,7 @@
1420

1521
import com.gaolei.mvpmodel.R;
1622
import com.gaolei.mvpmodel.utils.NetworkUtil;
23+
import com.gaolei.mvpmodel.utils.PermissionUtil;
1724
import com.gaolei.mvpmodel.utils.StatusBarUtil;
1825

1926
import org.greenrobot.eventbus.EventBus;
@@ -23,12 +30,16 @@
2330
import okhttp3.MediaType;
2431
import okhttp3.RequestBody;
2532

33+
import static com.gaolei.mvpmodel.utils.PermissionUtil.PERMISSION_CODE;
34+
2635

2736
/**
2837
* Created by gaolei on 2018/4/26.
2938
*/
3039

3140
public abstract class BaseActivity extends FragmentActivity implements View.OnClickListener {
41+
private PermissionUtil.RequestPermissionCallBack mRequestPermissionCallBack;
42+
3243
private Unbinder mBinder;
3344
ImageView iv_back;
3445
TextView title;
@@ -88,4 +99,68 @@ public void onClick(View v) {
8899
break;
89100
}
90101
}
102+
103+
/**
104+
* 发起权限请求
105+
*
106+
* @param context
107+
* @param permissions
108+
* @param callback
109+
*/
110+
111+
public void requestPermission(final Context context, final String[] permissions,
112+
PermissionUtil.RequestPermissionCallBack callback) {
113+
this.mRequestPermissionCallBack = callback;
114+
115+
//如果所有权限都已授权,则直接返回授权成功,只要有一项未授权,则发起权限请求
116+
boolean isAllGranted = true;
117+
for (String permission : permissions) {
118+
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
119+
isAllGranted = false;
120+
ActivityCompat.requestPermissions(((Activity) context), permissions, PERMISSION_CODE);
121+
}
122+
}
123+
if (isAllGranted) {
124+
mRequestPermissionCallBack.granted();
125+
}
126+
}
127+
128+
/**
129+
* 权限请求结果回调
130+
*
131+
* @param requestCode
132+
* @param permissions
133+
* @param grantResults
134+
*/
135+
@Override
136+
public void onRequestPermissionsResult(int requestCode, @NonNull final String[] permissions, @NonNull int[] grantResults) {
137+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
138+
boolean hasAllGranted = true;
139+
140+
switch (requestCode) {
141+
case PERMISSION_CODE: {
142+
for (int i = 0; i < grantResults.length; ++i) {
143+
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
144+
hasAllGranted = false;
145+
//在用户已经拒绝授权的情况下,如果shouldShowRequestPermissionRationale返回false则
146+
// 可以推断出用户选择了“不在提示”选项,在这种情况下需要引导用户至设置页手动授权
147+
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
148+
PermissionUtil.requestForeverDenyDialog(BaseActivity.this, permissions);
149+
150+
} else {
151+
PermissionUtil.requestDenyDialog(BaseActivity.this, permissions);
152+
153+
//用户拒绝权限请求,但未选中“不再提示”选项
154+
}
155+
mRequestPermissionCallBack.denied();
156+
return;
157+
}
158+
}
159+
if (hasAllGranted) {
160+
mRequestPermissionCallBack.granted();
161+
}
162+
}
163+
}
164+
}
165+
91166
}

0 commit comments

Comments
 (0)