package com.wuxiaolong.androidsamples;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import com.wuxiaolong.androidsamples.runtimepermission.OnPermissionCallbackListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.imid.swipebacklayout.lib.app.SwipeBackActivity;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission.READ_CONTACTS;
import static android.os.Build.VERSION_CODES.M;
/**
* Created by WuXiaolong on 2014/11/10.
* 微信公众号:吴小龙同学
* 个人博客:http://wuxiaolong.me/
*/
public class BaseActivity extends SwipeBackActivity {
public Context context;
public static int REQUEST_PERMISSION = 100;
public static int REQUEST_READ_CONTACTS = 101;
public static int REQUEST_READ_CONTACTS_LOCATION = 102;
public OnPermissionCallbackListener onPermissionCallbackListener;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
}
public Toolbar initToolbarAsHome(String title) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(title);
setSupportActionBar(toolbar);
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(false);
}
return toolbar;
}
public Toolbar initToolbar(String title) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(title);
setSupportActionBar(toolbar);
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
return toolbar;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/**
* 单独请求通讯录权限
*/
@TargetApi(M)
public void requestContacts() {
switch (checkSelfPermission(READ_CONTACTS)) {
case PackageManager.PERMISSION_GRANTED:
// 已有授权
Log.i("wxl", "已有授权");
break;
case PackageManager.PERMISSION_DENIED:
// 1、没有权限:尚未请求过权限;
// 2、或者请求授权被拒绝,用shouldShowRequestPermissionRationale判断用户是否拒绝过,如果返回true,表示用户拒绝过,
// 再次请求权限,将会出现“不再询问”,勾上“不再询问”,只能选择拒绝,再次进入,shouldShowRequestPermissionRationale始终false
// 3、或者曾经授权过,但用户在设置中禁用权限
Log.i("wxl", "是否拒绝过=" + shouldShowRequestPermissionRationale(READ_CONTACTS));
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
break;
default:
break;
}
}
/**
* 同时请求通讯录定位权限
*/
@TargetApi(M)
public void requestContactsLocation() {
List<String> permissionsList = new ArrayList<>();
permissionsList.add(READ_CONTACTS);
permissionsList.add(ACCESS_FINE_LOCATION);
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_READ_CONTACTS_LOCATION);
}
@TargetApi(M)
public void requestRuntimePermission(String permission, OnPermissionCallbackListener onPermissionCallbackListener) {
this.onPermissionCallbackListener = onPermissionCallbackListener;
switch (checkSelfPermission(permission)) {
case PackageManager.PERMISSION_GRANTED:
// 已有授权
Log.i("wxl", "已有授权");
if (this.onPermissionCallbackListener != null)
onPermissionCallbackListener.onGranted();
break;
case PackageManager.PERMISSION_DENIED:
// 1、没有权限:尚未请求过权限;
// 2、或者请求授权被拒绝,用shouldShowRequestPermissionRationale判断用户是否拒绝过,如果返回true,表示用户拒绝过,
// 再次请求权限,将会出现“不再询问”,勾上“不再询问”,只能选择拒绝,再次进入,shouldShowRequestPermissionRationale始终false
// 3、或者曾经授权过,但用户在设置中禁用权限
Log.i("wxl", "是否拒绝过=" + shouldShowRequestPermissionRationale(permission));
requestPermissions(new String[]{permission}, REQUEST_PERMISSION);
break;
default:
break;
}
}
/**
* Callback received when a permissions request has been completed.
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_READ_CONTACTS_LOCATION) {
Map<String, Integer> perms = new HashMap<>();
// Initial
perms.put(ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
perms.put(READ_CONTACTS, PackageManager.PERMISSION_GRANTED);
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
if (perms.get(ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& perms.get(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
Log.i("wxl", "授权请求被通过");
} else {
// Permission Denied
Log.i("wxl", "授权请求不被通过");
}
}
if (requestCode == REQUEST_READ_CONTACTS) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 授权请求被通过,读取通讯录
Log.i("wxl", "onRequestPermissionsResult=授权请求被通过,读取通讯录");
} else {
Log.i("wxl", "onRequestPermissionsResult=授权请求不被通过");
}
}
if (requestCode == REQUEST_PERMISSION) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 授权请求被通过,读取通讯录
Log.i("wxl", "onRequestPermissionsResult=授权请求被通过");
if (onPermissionCallbackListener != null)
onPermissionCallbackListener.onGranted();
} else {
Log.i("wxl", "onRequestPermissionsResult=授权请求不被通过");
if (onPermissionCallbackListener != null)
onPermissionCallbackListener.onDenied();
}
}
}
}