Android运行时权限给我带来问题
所以几天来,我一直在努力让我的应用程序在启动时请求所有必要的权限。我已将其编码为请求读写外部存储器、Internet和访问网络状态。当应用程序打开时,它只要求存储权限,在设置->应用程序->权限中的我的应用程序中,只有存储。任何帮助都将不胜感激 这是我的密码Android运行时权限给我带来问题,android,permissions,runtime,Android,Permissions,Runtime,所以几天来,我一直在努力让我的应用程序在启动时请求所有必要的权限。我已将其编码为请求读写外部存储器、Internet和访问网络状态。当应用程序打开时,它只要求存储权限,在设置->应用程序->权限中的我的应用程序中,只有存储。任何帮助都将不胜感激 这是我的密码 package gstankdev.gstank.mobilesvn; import android.Manifest; import android.content.Intent; import android.content.
package gstankdev.gstank.mobilesvn;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MobileSVN extends AppCompatActivity{
private static final int REQUEST_PERMISSIONS = 10;
public static MobileSVN mobsvn;
protected void onCreate(Bundle savedInstanceState) {
mobsvn = this;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mobile_svn);
if (ContextCompat.checkSelfPermission(MobileSVN.this, Manifest.permission.READ_EXTERNAL_STORAGE)
+ ContextCompat.checkSelfPermission(MobileSVN.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ ContextCompat.checkSelfPermission(MobileSVN.this, Manifest.permission.INTERNET)
+ ContextCompat.checkSelfPermission(MobileSVN.this, Manifest.permission.ACCESS_NETWORK_STATE)
!= PackageManager.PERMISSION_GRANTED) {
//permsGranted = false;
if (ActivityCompat.shouldShowRequestPermissionRationale(MobileSVN.this, Manifest.permission.READ_EXTERNAL_STORAGE) ||
ActivityCompat.shouldShowRequestPermissionRationale(MobileSVN.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) ||
ActivityCompat.shouldShowRequestPermissionRationale(MobileSVN.this, Manifest.permission.INTERNET) ||
ActivityCompat.shouldShowRequestPermissionRationale(MobileSVN.this, Manifest.permission.ACCESS_NETWORK_STATE)) {
Snackbar.make(findViewById(android.R.id.content), getString(R.string.app_name),
Snackbar.LENGTH_LONG).setAction((R.string.enable),
new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCompat.requestPermissions(MobileSVN.this,
new String[]{
Manifest.permission.INTERNET,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_NETWORK_STATE},
REQUEST_PERMISSIONS);
}
}).show();
} else {
ActivityCompat.requestPermissions(MobileSVN.this,
new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE},
REQUEST_PERMISSIONS);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String permissions[],
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_PERMISSIONS: {
if ((grantResults.length > 0) && (grantResults[0] +
grantResults[1]) == PackageManager.PERMISSION_GRANTED) {
//do nothing
} else {
Snackbar.make(findViewById(android.R.id.content), R.string.app_name,
Snackbar.LENGTH_LONG).setAction(R.string.enable,
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
}
}).show();
}
}
}
}
public Button begin;
public void init(){
begin = (Button)findViewById(R.id.begin);
begin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MobileSVN.this, svnsetup.class));
}
});
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
init();
}}
Android权限分为普通权限和危险权限。我们(开发人员)只需要在运行时检查和请求危险的权限,正常权限总是从清单中授予的
在这里您可以看到完整的危险权限列表:Android权限分为正常权限和危险权限。我们(开发人员)只需要在运行时检查和请求危险的权限,正常权限总是从清单中授予的 在这里,您可以看到完整的权限列表: 当应用程序打开时,它只请求存储权限 因为另外两个许可:
Manifest.permission.INTERNET
Manifest.permission.ACCESS_NETWORK_STATE
被归类为正常保护。因此,对于API23,您不需要为它们提供运行时权限
请检查此项以查看列表
您只需要为分类为危险权限的权限申请权限
比如:
当应用程序打开时,它只请求存储权限
因为另外两个许可:
Manifest.permission.INTERNET
Manifest.permission.ACCESS_NETWORK_STATE
被归类为正常保护。因此,对于API23,您不需要为它们提供运行时权限
请检查此项以查看列表
您只需要为分类为危险权限的权限申请权限
比如:
我不知道这一点,我想这就是为什么我为一个按钮编写的代码无法从服务器下载,但很明显,它又回到了绘图板上。thanksI不知道这一点,我认为这就是为什么我为从服务器开始下载的按钮编写的代码不起作用,但很明显,它又回到了绘图板上。谢谢