【问题标题】:Android M run time permission problemsAndroid M 运行时权限问题
【发布时间】:2016-07-29 15:00:51
【问题描述】:

我刚刚想出了如何让 android 应用发布一个对话框来请求权限,并且只在用户点击允许时执行特定命令。但是在那之后我坚持让应用程序重新启动,由于android错误,除非重新启动,否则应用程序没有权限。

类似的代码似乎不起作用。应用程序重新启动,但离开了原来的位置;保持设备在首次启动时分配的相同首选项。

// Schedule start after 1 second
        PendingIntent pi = PendingIntent.getActivity(this, 0, getIntent(), PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        am.set(AlarmManager.RTC, System.currentTimeMillis() + 10000, pi);

        // Stop now
        System.exit(0);

是否有另一种方法可以重启应用,让手机告诉应用它有权执行某些操作。

【问题讨论】:

  • 您无需重启应用即可获得权限。没有这样的Android错误。您能否发布更多信息,说明您认为存在此类错误的原因?
  • 不要重启应用,你只需要在运行时请求权限,并确保如果没有授予权限,它不会崩溃。
  • 我读过一些人的帖子说应用程序在被允许后不更改权限的问题是错误。进行此更改的唯一方法是完全重启应用程序。

标签: android android-studio android-6.0-marshmallow android-6.0.1-marshmallow


【解决方案1】:

在运行时请求权限异步工作,因此您应该在请求权限的活动中覆盖onRequestPermissionsResult()。像这样:

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


    switch (requestCode) {
        case Constants.YOUR_REQUEST_CODE: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted. do your stuff here
            } else {
                // Permission denied - Show a message to inform the user that this app only works
                // with these permissions granted

            }
            return;
        }

    }
}

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2016-06-30
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多