android 框架编程之 EasyPermissions
转载[来自一个用户的文章](https://www.cnblogs.com/renhui/p/10976493.html#_label3)
1.使用EasyPermissions 检查权限;(如果没有权限则进行第二部)
2.使用EasyPermissions 请求权限;(请求权限后,会出现1.用户给权限;2.用户不给权限,所以需要第三步,请求权限的结果)
3.EasyPermissions ,相应权限结果;
4.@AfterPermissionGranted
还未写完,下次继续
自己应用程序中的代码
package feng.obu.ui.login;
import android.app.Activity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import feng.obu.MainActivity;
import feng.obu.R;
import feng.obu.Utils;
import feng.obu.ui.login.LoginViewModel;
import feng.obu.ui.login.LoginViewModelFactory;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;
public class LoginActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
private LoginViewModel loginViewModel;
String [] permsList={"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.INTERNET",
// "android.permission.ACCESS_LOCATION",
"android.permission.ACCESS_FINE_LOCATION"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Boolean flag=EasyPermissions.hasPermissions(this,permsList);
if(!flag){
EasyPermissions.requestPermissions(this,"有以下权限才能正常使用",220,permsList);;
}
loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
.get(LoginViewModel.class);
final EditText usernameEditText = findViewById(R.id.username);
final EditText passwordEditText = findViewById(R.id.password);
final Button loginButton = findViewById(R.id.login);
final ProgressBar loadingProgressBar = findViewById(R.id.loading);
loginViewModel.getLoginFormState().observe(this, new Observer<LoginFormState>() {
@Override
public void onChanged(@Nullable LoginFormState loginFormState) {
if (loginFormState == null) {
return;
}
loginButton.setEnabled(loginFormState.isDataValid());
if (loginFormState.getUsernameError() != null) {
usernameEditText.setError(getString(loginFormState.getUsernameError()));
}
if (loginFormState.getPasswordError() != null) {
passwordEditText.setError(getString(loginFormState.getPasswordError()));
}
}
});
loginViewModel.getLoginResult().observe(this, new Observer<LoginResult>() {
@Override
public void onChanged(@Nullable LoginResult loginResult) {
if (loginResult == null) {
return;
}
loadingProgressBar.setVisibility(View.GONE);
if (loginResult.getError() != null) {
showLoginFailed(loginResult.getError());
}
if (loginResult.getSuccess() != null) {
updateUiWithUser(loginResult.getSuccess());
}
setResult(Activity.RESULT_OK);
startActivity(new Intent(LoginActivity.this, MainActivity.class));
//Complete and destroy login activity once successful
finish();
}
});
TextWatcher afterTextChangedListener = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// ignore
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// ignore
}
@Override
public void afterTextChanged(Editable s) {
loginViewModel.loginDataChanged(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
};
usernameEditText.addTextChangedListener(afterTextChangedListener);
passwordEditText.addTextChangedListener(afterTextChangedListener);
passwordEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
loginViewModel.login(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
return false;
}
});
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Boolean flag=EasyPermissions.hasPermissions(LoginActivity.this,permsList);
if(!flag){
EasyPermissions.requestPermissions(LoginActivity.this,"正常使用需要开启权限哦!",220,permsList);
return;
}
if(!Utils.getBluetoothisEnabled(LoginActivity.this)){
Utils.opendBluetooth();
return;
}
loadingProgressBar.setVisibility(View.VISIBLE);
loginViewModel.login(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
});
ActionBar actionBar = getSupportActionBar();
if(actionBar!=null){
actionBar.hide();
}
if(actionBar!=null){
actionBar.setIcon(R.drawable.ic_home_index);
actionBar.setLogo(R.drawable.icon_pwd);
// actionBar.setTitle("主标题");
}
}
private void updateUiWithUser(LoggedInUserView model) {
String welcome = getString(R.string.welcome) + model.getDisplayName();
// TODO : initiate successful logged in experience
Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
}
private void showLoginFailed(@StringRes Integer errorString) {
Toast.makeText(getApplicationContext(), errorString, Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
}
网友评论