Commit d3e7306b by 郑鹏

更换应用权限请求

parent cd442f97
...@@ -10,6 +10,7 @@ import android.support.v4.app.ActivityCompat ...@@ -10,6 +10,7 @@ import android.support.v4.app.ActivityCompat
import android.support.v4.app.Fragment import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter import android.support.v4.app.FragmentPagerAdapter
import android.support.v4.content.ContextCompat
import android.support.v4.view.ViewPager import android.support.v4.view.ViewPager
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
...@@ -33,20 +34,19 @@ import cn.dankal.client.ui.home.ScanResultActivity ...@@ -33,20 +34,19 @@ import cn.dankal.client.ui.home.ScanResultActivity
import cn.dankal.client.ui.home.details.MerchantDetailsActivity import cn.dankal.client.ui.home.details.MerchantDetailsActivity
import cn.dankal.client.ui.personal.PersonalFragment import cn.dankal.client.ui.personal.PersonalFragment
import cn.dankal.client.ui.shop.ShopFragment import cn.dankal.client.ui.shop.ShopFragment
import cn.dankal.entities.event.LocationChangeEvent
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.tasks.OnCompleteListener import com.google.android.gms.tasks.OnCompleteListener
import com.google.firebase.iid.FirebaseInstanceId import com.google.firebase.iid.FirebaseInstanceId
import com.google.gson.Gson import com.google.gson.Gson
import com.yanzhenjie.permission.AndPermission import com.tbruyelle.rxpermissions2.RxPermissions
import com.yanzhenjie.permission.Permission import com.yanzhenjie.permission.Permission
import com.yzq.zxinglibrary.common.Constant import com.yzq.zxinglibrary.common.Constant
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.functions.Consumer
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
import okhttp3.ResponseBody import okhttp3.ResponseBody
import org.greenrobot.eventbus.EventBus
import java.lang.reflect.Field import java.lang.reflect.Field
@Route(path = MAIN) @Route(path = MAIN)
...@@ -70,6 +70,7 @@ class MainActivity : BaseActivity(), OnMapReadyCallback { ...@@ -70,6 +70,7 @@ class MainActivity : BaseActivity(), OnMapReadyCallback {
val ITEM_CURRENT = 3 val ITEM_CURRENT = 3
// lateinit var commonDialog: CommonDialog // lateinit var commonDialog: CommonDialog
private var mRxPermissions: RxPermissions? = null
private var mMap: GoogleMap? = null private var mMap: GoogleMap? = null
...@@ -92,6 +93,8 @@ class MainActivity : BaseActivity(), OnMapReadyCallback { ...@@ -92,6 +93,8 @@ class MainActivity : BaseActivity(), OnMapReadyCallback {
} }
override fun initComponents() { override fun initComponents() {
mRxPermissions = RxPermissions(this)
uploadFireBaseToken() uploadFireBaseToken()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, if (ActivityCompat.checkSelfPermission(this,
...@@ -270,29 +273,32 @@ class MainActivity : BaseActivity(), OnMapReadyCallback { ...@@ -270,29 +273,32 @@ class MainActivity : BaseActivity(), OnMapReadyCallback {
private fun requestPermission() { private fun requestPermission() {
AndPermission.with(this) mRxPermissions?.let {
.runtime() it.request(Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_FINE_LOCATION).subscribe({
.permission(Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_FINE_LOCATION) if (it) {
.onGranted { //权限被允许
EventBus.getDefault().post(LocationChangeEvent()) initLocation()
} } else {
.onDenied {
val builder = CommonDialog.Builder(this) val builder = CommonDialog.Builder(this)
builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use)) builder.setTitle(getString(cn.dankal.user.R.string.prohibiting_access_will_affect_your_normal_use))
builder.setNegativeButton(getString(R.string.refuse), builder.setNegativeButton(getString(cn.dankal.user.R.string.refuse),
resources.getColor(R.color.color14)) { ContextCompat.getColor(this, cn.dankal.user.R.color.color14)) {
ToastUtils.showShort(getString(R.string.failed_to_obtain_permission)) ToastUtils.showShort(getString(cn.dankal.user.R.string.failed_to_obtain_permission))
commonDialog.dismiss() commonDialog.dismiss()
} }
builder.setPositiveButton(getString(R.string.agree_to_open), builder.setPositiveButton(getString(cn.dankal.user.R.string.agree_to_open),
resources.getColor(R.color.colorPrimary)) { ContextCompat.getColor(this, cn.dankal.user.R.color.colorPrimary)) {
toSelfSetting() toSelfSetting()
commonDialog.dismiss() commonDialog.dismiss()
} }
commonDialog = builder.create() commonDialog = builder.create()
commonDialog.show() commonDialog.show()
}.start() }
}, {
})
}
} }
......
package cn.dankal.basiclib.base.activity; package cn.dankal.basiclib.base.activity;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
...@@ -20,8 +21,10 @@ import android.view.WindowManager; ...@@ -20,8 +21,10 @@ import android.view.WindowManager;
import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.android.arouter.launcher.ARouter;
import com.yanzhenjie.permission.AndPermission; import com.tbruyelle.rxpermissions2.RxPermissions;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import java.util.List; import java.util.List;
import butterknife.ButterKnife; import butterknife.ButterKnife;
...@@ -30,19 +33,13 @@ import cn.dankal.basiclib.DankalApplication; ...@@ -30,19 +33,13 @@ import cn.dankal.basiclib.DankalApplication;
import cn.dankal.basiclib.R; import cn.dankal.basiclib.R;
import cn.dankal.basiclib.base.BaseView; import cn.dankal.basiclib.base.BaseView;
import cn.dankal.basiclib.base.callback.DKCallBackBoolean; import cn.dankal.basiclib.base.callback.DKCallBackBoolean;
import cn.dankal.basiclib.constant.Constant;
import cn.dankal.basiclib.constant.ConstantsHomeType; import cn.dankal.basiclib.constant.ConstantsHomeType;
import cn.dankal.basiclib.eventbus.UpdateLanguageEvent;
import cn.dankal.basiclib.hook.ViewDoubleClickUtil;
import cn.dankal.basiclib.util.ActivityManager; import cn.dankal.basiclib.util.ActivityManager;
import cn.dankal.basiclib.util.ActivityUtils; import cn.dankal.basiclib.util.ActivityUtils;
import cn.dankal.basiclib.util.ButtonUtil;
import cn.dankal.basiclib.util.DKHandler; import cn.dankal.basiclib.util.DKHandler;
import cn.dankal.basiclib.util.LanguageUtil;
import cn.dankal.basiclib.util.SPUtils; import cn.dankal.basiclib.util.SPUtils;
import cn.dankal.basiclib.util.TitleBarUtils; import cn.dankal.basiclib.util.TitleBarUtils;
import cn.dankal.basiclib.util.ToastUtils; import cn.dankal.basiclib.util.ToastUtils;
import cn.dankal.basiclib.util.language.LocalManageUtil;
import cn.dankal.basiclib.util.language.MultiLanguage; import cn.dankal.basiclib.util.language.MultiLanguage;
import cn.dankal.basiclib.widget.CommonDialog; import cn.dankal.basiclib.widget.CommonDialog;
import cn.dankal.basiclib.widget.TipDialog; import cn.dankal.basiclib.widget.TipDialog;
...@@ -51,6 +48,7 @@ import cn.dankal.basiclib.widget.titlebar.ITitleBar; ...@@ -51,6 +48,7 @@ import cn.dankal.basiclib.widget.titlebar.ITitleBar;
import cn.dankal.basiclib.widget.titlebar.SingleTextTitle; import cn.dankal.basiclib.widget.titlebar.SingleTextTitle;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/** /**
* @author Dankal Android Developer * @author Dankal Android Developer
...@@ -63,6 +61,7 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView ...@@ -63,6 +61,7 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView
private CompositeDisposable mDisposables = new CompositeDisposable(); private CompositeDisposable mDisposables = new CompositeDisposable();
protected CommonDialog commonDialog; protected CommonDialog commonDialog;
private LocationManager lm = null; private LocationManager lm = null;
private RxPermissions mRxPermissions;
@Override @Override
protected void attachBaseContext(Context newBase) { protected void attachBaseContext(Context newBase) {
...@@ -90,6 +89,7 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView ...@@ -90,6 +89,7 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ARouter.getInstance().inject(this); ARouter.getInstance().inject(this);
mRxPermissions = new RxPermissions(this);
/* if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT) { /* if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT) {
//透明状态栏 //透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
...@@ -183,15 +183,6 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView ...@@ -183,15 +183,6 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView
QMUIStatusBarHelper.setStatusBarLightMode(this); QMUIStatusBarHelper.setStatusBarLightMode(this);
} }
public void setTranslucent(Activity context, View view) {
if (view != null) {
// QMUIStatusBarHelper.translucent(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
view.setPadding(0, QMUIStatusBarHelper.getStatusbarHeight(context), 0, 0);
}
}
}
/** /**
* setContentView(LayoutResId) * setContentView(LayoutResId)
* *
...@@ -418,38 +409,47 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView ...@@ -418,38 +409,47 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseView
commonDialog.show(); commonDialog.show();
} }
@SuppressLint("CheckResult")
public void requestPermission(String permission, PermissionState permissionState) { public void requestPermission(String permission, PermissionState permissionState) {
AndPermission.with(this) if (mRxPermissions != null) {
.runtime() mRxPermissions.request(permission).subscribe(new Consumer<Boolean>() {
.permission(permission) @Override
.onDenied(permissions -> { public void accept(Boolean aBoolean) throws Exception {
CommonDialog.Builder builder = new CommonDialog.Builder(this); if (aBoolean) {
builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use)); if (permissionState != null) {
permissionState.onPermissionState();
builder.setNegativeButton(getString(R.string.refuse), getResources().getColor(R.color.color14), type -> {
ToastUtils.showShort(getString(R.string.failed_to_obtain_permission));
commonDialog.dismiss();
});
builder.setPositiveButton(getString(R.string.agree_to_open), getResources().getColor(R.color.colorPrimary), new DKCallBackBoolean() {
@Override
public void action(int type) {
toSelfSetting();
commonDialog.dismiss();
} }
}); } else {
commonDialog = builder.create(); CommonDialog.Builder builder = new CommonDialog.Builder(BaseActivity.this);
commonDialog.show(); builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use));
}).onGranted(data -> {
//权限被允许 builder.setNegativeButton(getString(R.string.refuse), getResources().getColor(R.color.color14), type -> {
if (permissionState != null) { ToastUtils.showShort(getString(R.string.failed_to_obtain_permission));
permissionState.onPermissionState(); commonDialog.dismiss();
} });
}).start();
builder.setPositiveButton(getString(R.string.agree_to_open), getResources().getColor(R.color.colorPrimary), new DKCallBackBoolean() {
@Override
public void action(int type) {
toSelfSetting();
commonDialog.dismiss();
}
});
commonDialog = builder.create();
commonDialog.show();
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}
} }
public interface PermissionState { public interface PermissionState {
public void onPermissionState(); void onPermissionState();
} }
/** /**
......
package cn.dankal.basiclib.base.fragment; package cn.dankal.basiclib.base.fragment;
import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
...@@ -14,8 +15,7 @@ import android.view.View; ...@@ -14,8 +15,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import com.tbruyelle.rxpermissions2.RxPermissions;
import com.yanzhenjie.permission.AndPermission;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.Unbinder; import butterknife.Unbinder;
...@@ -34,6 +34,7 @@ import cn.dankal.basiclib.widget.titlebar.ITitleBar; ...@@ -34,6 +34,7 @@ import cn.dankal.basiclib.widget.titlebar.ITitleBar;
import cn.dankal.basiclib.widget.titlebar.SingleTextTitle; import cn.dankal.basiclib.widget.titlebar.SingleTextTitle;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/** /**
* description: Fragment 基类 * description: Fragment 基类
...@@ -50,6 +51,7 @@ public abstract class BaseFragment extends Fragment implements BaseView { ...@@ -50,6 +51,7 @@ public abstract class BaseFragment extends Fragment implements BaseView {
protected CommonDialog commonDialog; protected CommonDialog commonDialog;
private CompositeDisposable mDisposables = new CompositeDisposable(); private CompositeDisposable mDisposables = new CompositeDisposable();
private RxPermissions mRxPermissions;
protected boolean isVisibleToUser; protected boolean isVisibleToUser;
@Nullable @Nullable
...@@ -63,6 +65,7 @@ public abstract class BaseFragment extends Fragment implements BaseView { ...@@ -63,6 +65,7 @@ public abstract class BaseFragment extends Fragment implements BaseView {
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
mRxPermissions = new RxPermissions(getActivity());
initComponents(); initComponents();
obtainData(); obtainData();
} }
...@@ -248,39 +251,47 @@ public abstract class BaseFragment extends Fragment implements BaseView { ...@@ -248,39 +251,47 @@ public abstract class BaseFragment extends Fragment implements BaseView {
commonDialog.show(); commonDialog.show();
} }
public void requestPermission(String permission, BaseActivity.PermissionState permissionState) { @SuppressLint("CheckResult")
AndPermission.with(this) public void requestPermission(String permission, PermissionState permissionState) {
.runtime() if (mRxPermissions != null) {
.permission(permission) mRxPermissions.request(permission).subscribe(new Consumer<Boolean>() {
.onDenied(permissions -> { @Override
CommonDialog.Builder builder = new CommonDialog.Builder(getActivity()); public void accept(Boolean aBoolean) {
builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use)); if (aBoolean) {
if (permissionState != null) {
builder.setNegativeButton(getString(R.string.refuse), getResources().getColor(R.color.color14), type -> { permissionState.onPermissionState();
ToastUtils.showShort(getString(R.string.failed_to_obtain_permission)); }
commonDialog.dismiss(); } else {
}); CommonDialog.Builder builder = new CommonDialog.Builder(getActivity());
builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use));
builder.setPositiveButton(getString(R.string.agree_to_open), getResources().getColor(R.color.colorPrimary), new DKCallBackBoolean() {
@Override builder.setNegativeButton(getString(R.string.refuse), getResources().getColor(R.color.color14), type -> {
public void action(int type) { ToastUtils.showShort(getString(R.string.failed_to_obtain_permission));
toSelfSetting();
commonDialog.dismiss(); commonDialog.dismiss();
} });
});
commonDialog = builder.create(); builder.setPositiveButton(getString(R.string.agree_to_open), getResources().getColor(R.color.colorPrimary), new DKCallBackBoolean() {
commonDialog.show(); @Override
}).onGranted(data -> { public void action(int type) {
//权限被允许 toSelfSetting();
if (permissionState != null) { commonDialog.dismiss();
permissionState.onPermissionState(); }
} });
}).start(); commonDialog = builder.create();
commonDialog.show();
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}
} }
public interface PermissionState { public interface PermissionState {
public void onPermissionState(); void onPermissionState();
} }
/** /**
......
package cn.dankal.user.login package cn.dankal.user.login
import android.os.Handler import android.os.Handler
import android.support.v4.content.ContextCompat
import android.text.Editable import android.text.Editable
import android.text.TextUtils import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
...@@ -27,12 +28,13 @@ import kotlinx.android.synthetic.main.activity_login.* ...@@ -27,12 +28,13 @@ import kotlinx.android.synthetic.main.activity_login.*
import com.google.android.gms.tasks.OnCompleteListener import com.google.android.gms.tasks.OnCompleteListener
import com.google.firebase.iid.FirebaseInstanceId import com.google.firebase.iid.FirebaseInstanceId
import com.mhq.smartorder.wxapi.WXEntryActivity import com.mhq.smartorder.wxapi.WXEntryActivity
import com.tbruyelle.rxpermissions2.RxPermissions
import com.tencent.mm.opensdk.modelmsg.SendAuth import com.tencent.mm.opensdk.modelmsg.SendAuth
import com.tencent.mm.opensdk.openapi.IWXAPI import com.tencent.mm.opensdk.openapi.IWXAPI
import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.tencent.mm.opensdk.openapi.WXAPIFactory
import com.yanzhenjie.permission.AndPermission
import com.yanzhenjie.permission.Permission import com.yanzhenjie.permission.Permission
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.functions.Consumer
import okhttp3.ResponseBody import okhttp3.ResponseBody
...@@ -55,9 +57,13 @@ class LoginActivity : BaseActivity() { ...@@ -55,9 +57,13 @@ class LoginActivity : BaseActivity() {
return R.layout.activity_login return R.layout.activity_login
} }
private var mRxPermissions: RxPermissions? = null
override fun initComponents() { override fun initComponents() {
addSingleTitleBar(getString(R.string.login)) addSingleTitleBar(getString(R.string.login))
mRxPermissions = RxPermissions(this)
getLocationPermission() getLocationPermission()
iwxapi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WX_APP_ID, true) iwxapi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WX_APP_ID, true)
...@@ -94,10 +100,10 @@ class LoginActivity : BaseActivity() { ...@@ -94,10 +100,10 @@ class LoginActivity : BaseActivity() {
} }
fl_weChat_login.setOnClickListener { fl_weChat_login.setOnClickListener {
/* if (!UIUtils.isWeixinAvilible(this)) { /* if (!UIUtils.isWeixinAvilible(this)) {
ToastUtils.showShort(getString(R.string.please_instal_wechat)) ToastUtils.showShort(getString(R.string.please_instal_wechat))
return@setOnClickListener return@setOnClickListener
}*/ }*/
setWeChatLogin() setWeChatLogin()
} }
...@@ -105,29 +111,32 @@ class LoginActivity : BaseActivity() { ...@@ -105,29 +111,32 @@ class LoginActivity : BaseActivity() {
} }
private fun getLocationPermission() { private fun getLocationPermission() {
AndPermission.with(this) mRxPermissions?.let {
.runtime() it.request(Permission.ACCESS_COARSE_LOCATION, Permission.READ_PHONE_STATE).subscribe({
.permission(Permission.ACCESS_COARSE_LOCATION, Permission.READ_PHONE_STATE) if (it) {
.onDenied { //权限被允许
initLocation()
} else {
val builder = CommonDialog.Builder(this) val builder = CommonDialog.Builder(this)
builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use)) builder.setTitle(getString(R.string.prohibiting_access_will_affect_your_normal_use))
builder.setNegativeButton(getString(R.string.refuse), builder.setNegativeButton(getString(R.string.refuse),
resources.getColor(R.color.color14)) { ContextCompat.getColor(this, R.color.color14)) {
ToastUtils.showShort(getString(R.string.failed_to_obtain_permission)) ToastUtils.showShort(getString(R.string.failed_to_obtain_permission))
commonDialog.dismiss() commonDialog.dismiss()
} }
builder.setPositiveButton(getString(R.string.agree_to_open), builder.setPositiveButton(getString(R.string.agree_to_open),
resources.getColor(R.color.colorPrimary)) { ContextCompat.getColor(this, R.color.colorPrimary)) {
toSelfSetting() toSelfSetting()
commonDialog.dismiss() commonDialog.dismiss()
} }
commonDialog = builder.create() commonDialog = builder.create()
commonDialog.show() commonDialog.show()
}.onGranted { }
//权限被允许 }, {
initLocation()
}.start() })
}
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment