You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android权限请求异常:授予READ_PHONE_STATE权限后应用闪退重启求助

Troubleshooting Your READ_PHONE_STATE Permission Crash Issue

Hey there! Let's dig into why your app is crashing right after granting the READ_PHONE_STATE permission. Based on the behavior you described, here are the most likely issues in your Java code to check:

1. Broken Permission Callback Handling

The most common culprit here is a mishandled onRequestPermissionsResult callback. If you're not properly validating the grant results, or accidentally calling methods that close/restart the Activity (like finish()) in this callback, it'll cause your app to crash immediately after permission is granted.

Double-check your callback logic to make sure it follows this safe pattern:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    // Always call the super method first to avoid system-level issues
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
    // Replace with your custom request code
    final int PHONE_STATE_REQUEST = 101;
    if (requestCode == PHONE_STATE_REQUEST) {
        if (grantResults.length > 0) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission granted - run your intended logic here
                Toast.makeText(this, "权限已授权", Toast.LENGTH_SHORT).show();
            } else {
                // Permission denied - handle gracefully (don't crash!)
                Toast.makeText(this, "权限被拒绝,部分功能无法使用", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

2. Custom Toast Replacing System Permission Dialog

You mentioned a Toast popping up to ask for allow/deny after tapping your "Grant Permission" button. That's a red flag! Android's native permission flow uses a system-level dialog, not a Toast. If you're rolling your own Toast-based permission prompt, it's conflicting with the actual system permission request process, which can trigger unexpected crashes.

Stick to the official permission API: use ActivityCompat.requestPermissions() to trigger the system's native dialog, not custom Toast prompts.

3. Poor Timing for Permission Request

If you're triggering the permission request too early in the Activity lifecycle (like in onCreate() before the Activity is fully initialized), some Android versions might restart the Activity after handling the permission grant. This can feel like a crash, but it's actually the system resetting the Activity state.

Move your permission request to a user-initiated action (like a button click) or wait until onResume() to ensure the Activity is fully ready.

4. Uncaught Exceptions in Post-Permission Logic

Even if the callback is correct, if the code you run after permission is granted has an uncaught exception (like a null pointer, missing resource, or invalid operation), it'll crash the app immediately.

Check your Logcat for AndroidRuntime errors right after the crash—this will show you the exact line of code causing the problem. It's the fastest way to pinpoint the issue.


内容的提问来源于stack exchange,提问作者K.rise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:09:20