首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >onRequestPermissionResult在AppCompatActivity中未被调用

onRequestPermissionResult在AppCompatActivity中未被调用
EN

Stack Overflow用户
提问于 2020-09-01 16:33:41
回答 1查看 132关注 0票数 0

我试图申请一些许可,我的应用程序内的启动活动。此活动只检查权限,并提示用户请求缺少权限。我想要做的是,在1.5秒后,如果用户被提示并接受/拒绝所需的权限,则启动主活动,显示应用程序的仪表板。现在的问题是,无论我做什么,onRequestPermissionResult都不会被调用,我也不明白问题是从何而来的。我提到成功地请求了权限,提示用户并能够接受它们或拒绝它们,但是回调不会以某种方式触发。

这是我的活动代码:

代码语言:javascript
复制
public class LauncherActivity extends AppCompatActivity {
    public static final String TAG = LauncherActivity.class.getSimpleName();
    private boolean permissionsGiven;

    private static final String[] REQUIRED_PERMISSIONS =
            new String[] {
                    Manifest.permission.BLUETOOTH,
                    Manifest.permission.BLUETOOTH_ADMIN,
                    Manifest.permission.ACCESS_WIFI_STATE,
                    Manifest.permission.CHANGE_WIFI_STATE,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION
            };

    private static final int REQUEST_CODE_REQUIRED_PERMISSIONS = 1;

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

        if (!hasPermissions(this, REQUIRED_PERMISSIONS)) {
            permissionsGiven = false;
            Log.d(TAG, "onCreate: app does not have all the required permissions. Requesting permissions...");

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                ActivityCompat.requestPermissions(
                        this,
                        REQUIRED_PERMISSIONS,
                        REQUEST_CODE_REQUIRED_PERMISSIONS
                );
            }
        } else {
            permissionsGiven = true;
        }

        Runnable enterApplication = new Runnable() {
            @Override
            public void run() {
                while (!permissionsGiven);

                SharedPreferences loginPreferences = getApplicationContext().getSharedPreferences("LOGIN_DETAILS", MODE_PRIVATE);

                boolean signedIn = loginPreferences.getBoolean("signedIn", false);

                if (!signedIn) {
                    Log.d(TAG, "onCreate: user is not signed in. Sending him to login activity...");
                    sendUserToLoginActivity();
                } else {
                    sendUserToMainActivity();
                }
            }
        };

        Handler launcherHandler = new Handler();
        launcherHandler.postDelayed(enterApplication, 1500);
    }

    private static boolean hasPermissions(Context context, String... permissions) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }

        return true;
    }

    @CallSuper
    @Override
    public void onRequestPermissionsResult(
            int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode != REQUEST_CODE_REQUIRED_PERMISSIONS) {
            return;
        }

        permissionsGiven = true;

        for (int grantResult : grantResults) {
            if (grantResult == PackageManager.PERMISSION_DENIED) {
                Toast.makeText(this, "Missing permissions", Toast.LENGTH_LONG).show();
                finish();
                return;
            }
        }

        recreate();
    }

    private void sendUserToLoginActivity() {
        Log.d(TAG, "sendUserToLoginActivity: starting login activity...");
        Intent loginIntent = new Intent(LauncherActivity.this, SignInActivity.class);
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(loginIntent);
        finish();
    }

    private void sendUserToMainActivity() {
        Log.d(TAG, "sendUserToMainActivity: starting main activity...");
        Intent mainIntent = new Intent(LauncherActivity.this, MainActivity.class);
        mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(mainIntent);
        finish();
    }
}

有人能帮我理解我做错了什么,怎么触发onRequestPermissionsResult,这样我就可以在应用程序中启动下一个活动了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 18:20:15

重新创建();

我从没见过那种方法。

不要叫它做测试,而是放一个烤面包。

我不知道你怎么知道它不是被触发的。

此外,我不会使用等待变量更改其值的线程。

此外,你根本不需要线程。只需调用onCreate或onRequestPermissionsResult中的代码即可。您可以将所有的代码放在一个函数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63691864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档