检查权限并重新加载 activity
Check permissions and reload the activity
大家好,我在检查运行时权限后加载 activity 元素时遇到问题 我为 Lollipop 制作了一个应用程序,但现在我需要更新到 Marshmallow,所以我遇到了这个问题
我有一个 MainActivity
public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(checkAndRequestPermissions(this)) {
//Var created
Internetstatus = (TextView) findViewById(R.id.statusInternet);
if (!verificaConexion(this)) {
Internetstatus.setText("NOT CONNECTED");
} else {
Internetstatus.setText("CONNECTED");
}
}
}
public static boolean verificaConexion(Context ctx) {
boolean bConectado = false;
ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) {
bConectado = true;
}
return bConectado;
}
private boolean checkAndRequestPermissions(Context ctx) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Toast.makeText(this, "Checking permission…", Toast.LENGTH_SHORT).show ();
//List of permissions
int permissionInternet = ContextCompat.checkSelfPermission(this,
Manifest.permission.INTERNET);
int permissionAccessNetwork = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_NETWORK_STATE);
int permissionReadExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
int permissionWriteExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
//Verify status of permissions
if (permissionInternet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.INTERNET);
}
if (permissionAccessNetwork != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_NETWORK_STATE);
}
if (permissionReadExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissionWriteExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
return true;
}
}
是的,我在 activity 中有更多元素,但是对于示例来说,只有一个文本就可以了:),检查权限很好但是当我按下允许权限时 activity文本状态是默认文本 xD! "Small Text",所以 setText 不起作用,但如果我关闭应用程序并再次打开,一切都可以正常工作,因为我已经允许了权限。嘿,我是第一次做棉花糖的app,所以问题可能很蠢哈哈哈。
好吧,在那之后不工作我想也许如果我创建一个新的 activity LoadActivity 我可以在那里检查权限(移动功能检查和所有关于从 MainActivity 到 LoadActivity 的检查权限)并且如果条件是很好,我初始化了 MainActivity,这很好地启动了新的 activity (LoadActivity),我检查了权限,但是在我允许权限后启动 MainActivity 不起作用
新的 LoadActivity 是
public class LoadActivity extends AppCompatActivity {
public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
if(checkAndRequestPermissions(this)) {
Intent intent = new Intent(this, MainActivity.class);
startActivityForResult(intent, 0);
}
}
private boolean checkAndRequestPermissions(Context ctx) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Toast.makeText(this, "Checking permission…", Toast.LENGTH_SHORT).show ();
//List of permissions
int permissionInternet = ContextCompat.checkSelfPermission(this,
Manifest.permission.INTERNET);
int permissionAccessNetwork = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_NETWORK_STATE);
int permissionReadExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
int permissionWriteExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
//Verify status of permissions
if (permissionInternet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.INTERNET);
}
if (permissionAccessNetwork != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_NETWORK_STATE);
}
if (permissionReadExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissionWriteExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
return true;
}
}
我希望有人能帮助我:D
问候
阅读此页:
https://developer.android.com/training/permissions/requesting.html
主要问题是您请求权限然后 return false
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
所以这个if语句不会通过
if(checkAndRequestPermissions(this))
您必须实施 onRequestPermissionsResult() 正如评论中所说。
此外,你的方法是私有的而不是静态的,所以你不需要传递 Context
作为参数,你可以像你一样在里面调用 this
,只是指向不是很重要.
检查权限是否被授予,然后调用 setText 否则什么都不做。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(checkAndRequestPermissions(this)) { //Var created
Internetstatus = (TextView) findViewById(R.id.statusInternet);
if (!verificaConexion(this)) {
Internetstatus.setText("NOT CONNECTED");
} else {
Internetstatus.setText("CONNECTED");
}
}
}
如果您想在授予权限后设置文本,那么您应该覆盖方法 onRequestPermissionResult 并从中再次调用 setText。 activity onCreate 方法授权后不会再调用
这就是为什么它在您关闭并重新打开应用程序时起作用的原因,因为您的应用程序的新打开会再次调用 activity onCreate,现在您的方法 checkAndRequestPermissions returns true => setText 将是叫
谢谢大家,现在我明白了,好吧,我贴上我的新功能代码,也许对其他人有帮助。
public class LoadActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
insertDummyContactWrapper();
}
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
private void insertDummyContactWrapper() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<String> permissionsNeeded = new ArrayList<String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList, Manifest.permission.INTERNET))
permissionsNeeded.add("Internet.");
if (!addPermission(permissionsList, Manifest.permission.ACCESS_NETWORK_STATE))
permissionsNeeded.add("Internet Status.");
if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE))
permissionsNeeded.add("Read Files.");
if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE))
permissionsNeeded.add("Write Files.");
if (permissionsList.size() > 0) {
if (permissionsNeeded.size() > 0) {
// Need Rationale
String message = "You need to grant access to " + permissionsNeeded.get(0);
for (int i = 1; i < permissionsNeeded.size(); i++)
message = message + ", " + permissionsNeeded.get(i);
showMessageOKCancel(message,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
}
});
return;
}
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return;
}
}
startApp();
}
private boolean addPermission(List<String> permissionsList, String permission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!shouldShowRequestPermissionRationale(permission))
return false;
}
}
return true;
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(LoadActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
{
Map<String, Integer> perms = new HashMap<String, Integer>();
// Initial
perms.put(Manifest.permission.INTERNET, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_NETWORK_STATE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
// Fill with results
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
// Check for ACCESS_FINE_LOCATION
if (perms.get(Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// All Permissions Granted
startApp();
} else {
// Permission Denied
Toast.makeText(LoadActivity.this, "Some Permission is Denied, please allow permission for that the app can work.", Toast.LENGTH_SHORT)
.show();
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void startApp(){
Intent intent = new Intent(this, MainActivity.class);
startActivityForResult(intent, 0);
}
}
希望对大家有帮助:D
为了使它成为我基于其他用户评论的文章,最后来自这篇文章
并向新手推荐此视频 android marshmallow
https://www.youtube.com/watch?v=C8lUdPVSzDk
此致!
通过实现接口ActivityCompat.OnRequestPermissionsResultCallback,我们可以检查用户是否被授予请求权限。如果给定,我们可以通过实现名为 onRequestPermissionsResult 的方法再次加载 activity。有关详细信息,请查看此 link https://developer.android.com/training/permissions/requesting.html
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(isStoragePermissionGranted()) {
// code to implement after permission granted
}
}
public boolean isStoragePermissionGranted() {
String TAG = "logcheck";
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED ) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
boolean flag;
flag = true;
if(requestCode == 1)
{
for (int i:grantResults)
{
if( i == PackageManager.PERMISSION_DENIED)
flag = false;
}
if (flag)
{
Intent intent = new Intent(this,MainActivity.class);
finish();
startActivity(intent);
}
}
}
}
大家好,我在检查运行时权限后加载 activity 元素时遇到问题 我为 Lollipop 制作了一个应用程序,但现在我需要更新到 Marshmallow,所以我遇到了这个问题
我有一个 MainActivity
public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(checkAndRequestPermissions(this)) {
//Var created
Internetstatus = (TextView) findViewById(R.id.statusInternet);
if (!verificaConexion(this)) {
Internetstatus.setText("NOT CONNECTED");
} else {
Internetstatus.setText("CONNECTED");
}
}
}
public static boolean verificaConexion(Context ctx) {
boolean bConectado = false;
ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) {
bConectado = true;
}
return bConectado;
}
private boolean checkAndRequestPermissions(Context ctx) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Toast.makeText(this, "Checking permission…", Toast.LENGTH_SHORT).show ();
//List of permissions
int permissionInternet = ContextCompat.checkSelfPermission(this,
Manifest.permission.INTERNET);
int permissionAccessNetwork = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_NETWORK_STATE);
int permissionReadExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
int permissionWriteExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
//Verify status of permissions
if (permissionInternet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.INTERNET);
}
if (permissionAccessNetwork != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_NETWORK_STATE);
}
if (permissionReadExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissionWriteExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
return true;
}
}
是的,我在 activity 中有更多元素,但是对于示例来说,只有一个文本就可以了:),检查权限很好但是当我按下允许权限时 activity文本状态是默认文本 xD! "Small Text",所以 setText 不起作用,但如果我关闭应用程序并再次打开,一切都可以正常工作,因为我已经允许了权限。嘿,我是第一次做棉花糖的app,所以问题可能很蠢哈哈哈。
好吧,在那之后不工作我想也许如果我创建一个新的 activity LoadActivity 我可以在那里检查权限(移动功能检查和所有关于从 MainActivity 到 LoadActivity 的检查权限)并且如果条件是很好,我初始化了 MainActivity,这很好地启动了新的 activity (LoadActivity),我检查了权限,但是在我允许权限后启动 MainActivity 不起作用
新的 LoadActivity 是
public class LoadActivity extends AppCompatActivity {
public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
if(checkAndRequestPermissions(this)) {
Intent intent = new Intent(this, MainActivity.class);
startActivityForResult(intent, 0);
}
}
private boolean checkAndRequestPermissions(Context ctx) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Toast.makeText(this, "Checking permission…", Toast.LENGTH_SHORT).show ();
//List of permissions
int permissionInternet = ContextCompat.checkSelfPermission(this,
Manifest.permission.INTERNET);
int permissionAccessNetwork = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_NETWORK_STATE);
int permissionReadExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
int permissionWriteExternal = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
//Verify status of permissions
if (permissionInternet != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.INTERNET);
}
if (permissionAccessNetwork != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_NETWORK_STATE);
}
if (permissionReadExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissionWriteExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
return true;
}
}
我希望有人能帮助我:D 问候
阅读此页: https://developer.android.com/training/permissions/requesting.html
主要问题是您请求权限然后 return false
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
所以这个if语句不会通过
if(checkAndRequestPermissions(this))
您必须实施 onRequestPermissionsResult() 正如评论中所说。
此外,你的方法是私有的而不是静态的,所以你不需要传递 Context
作为参数,你可以像你一样在里面调用 this
,只是指向不是很重要.
检查权限是否被授予,然后调用 setText 否则什么都不做。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(checkAndRequestPermissions(this)) { //Var created
Internetstatus = (TextView) findViewById(R.id.statusInternet);
if (!verificaConexion(this)) {
Internetstatus.setText("NOT CONNECTED");
} else {
Internetstatus.setText("CONNECTED");
}
}
}
如果您想在授予权限后设置文本,那么您应该覆盖方法 onRequestPermissionResult 并从中再次调用 setText。 activity onCreate 方法授权后不会再调用
这就是为什么它在您关闭并重新打开应用程序时起作用的原因,因为您的应用程序的新打开会再次调用 activity onCreate,现在您的方法 checkAndRequestPermissions returns true => setText 将是叫
谢谢大家,现在我明白了,好吧,我贴上我的新功能代码,也许对其他人有帮助。
public class LoadActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load);
insertDummyContactWrapper();
}
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
private void insertDummyContactWrapper() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<String> permissionsNeeded = new ArrayList<String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList, Manifest.permission.INTERNET))
permissionsNeeded.add("Internet.");
if (!addPermission(permissionsList, Manifest.permission.ACCESS_NETWORK_STATE))
permissionsNeeded.add("Internet Status.");
if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE))
permissionsNeeded.add("Read Files.");
if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE))
permissionsNeeded.add("Write Files.");
if (permissionsList.size() > 0) {
if (permissionsNeeded.size() > 0) {
// Need Rationale
String message = "You need to grant access to " + permissionsNeeded.get(0);
for (int i = 1; i < permissionsNeeded.size(); i++)
message = message + ", " + permissionsNeeded.get(i);
showMessageOKCancel(message,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
}
});
return;
}
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return;
}
}
startApp();
}
private boolean addPermission(List<String> permissionsList, String permission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!shouldShowRequestPermissionRationale(permission))
return false;
}
}
return true;
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(LoadActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
{
Map<String, Integer> perms = new HashMap<String, Integer>();
// Initial
perms.put(Manifest.permission.INTERNET, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_NETWORK_STATE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
// Fill with results
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
// Check for ACCESS_FINE_LOCATION
if (perms.get(Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// All Permissions Granted
startApp();
} else {
// Permission Denied
Toast.makeText(LoadActivity.this, "Some Permission is Denied, please allow permission for that the app can work.", Toast.LENGTH_SHORT)
.show();
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void startApp(){
Intent intent = new Intent(this, MainActivity.class);
startActivityForResult(intent, 0);
}
}
希望对大家有帮助:D
为了使它成为我基于其他用户评论的文章,最后来自这篇文章
并向新手推荐此视频 android marshmallow
https://www.youtube.com/watch?v=C8lUdPVSzDk
此致!
通过实现接口ActivityCompat.OnRequestPermissionsResultCallback,我们可以检查用户是否被授予请求权限。如果给定,我们可以通过实现名为 onRequestPermissionsResult 的方法再次加载 activity。有关详细信息,请查看此 link https://developer.android.com/training/permissions/requesting.html
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(isStoragePermissionGranted()) {
// code to implement after permission granted
}
}
public boolean isStoragePermissionGranted() {
String TAG = "logcheck";
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED ) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
boolean flag;
flag = true;
if(requestCode == 1)
{
for (int i:grantResults)
{
if( i == PackageManager.PERMISSION_DENIED)
flag = false;
}
if (flag)
{
Intent intent = new Intent(this,MainActivity.class);
finish();
startActivity(intent);
}
}
}
}