为什么我的权限突然在我正在编写的Android应用程序上消失?

时间:2016-08-18 03:53:26

标签: android android-studio android-permissions

我一直在研究Android应用程序。它会记录并写入本地存储区域。以下是权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

在调试过程中,我失去了平板电脑本身的权限。我不得不去设置 - >应用程序 - &gt;(我的应用程序) - &gt;应用程序权限并自行打开它们。麦克风和存储都将滑块设置为关闭。

虽然我现在正在运行,但我很想知道这可能是怎么发生的,所以我可以防止它再次发生。

关于我应该看的地方的任何线索?

谢谢,

2 个答案:

答案 0 :(得分:1)

运行时权限演示。

public class MyDevIDS extends AppCompatActivity {

        private static final int REQUEST_RUNTIME_PERMISSION = 123;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                // you have permission go ahead
                createApplicationFolder();
            } else {
                // you do not have permission go request runtime permissions
                RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
            }
        }

        @Override
        public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

            switch (permsRequestCode) {

                case REQUEST_RUNTIME_PERMISSION: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // you have permission go ahead
                        createApplicationFolder();
                    } else {
                        // you do not have permission show toast.
                    }
                    return;
                }
            }
        }

        public void RequestPermission(Activity thisActivity, String Permission, int Code) {
            if (ContextCompat.checkSelfPermission(thisActivity,
                    Permission)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Permission)) {
                } else {
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Permission},
                            Code);
                }
            }
        }

        public boolean CheckPermission(Context context, String Permission) {
            if (ContextCompat.checkSelfPermission(context,
                    Permission) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }
    }

答案 1 :(得分:0)

在Android 6+上,如果没有运行时的显式请求,则不会授予某些权限,例如存储。

如果您卸载并重新安装应用程序或只是清除应用程序数据,则会撤消权限。这可以解释你的情况。