【发布时间】:2016-03-23 05:13:50
【问题描述】:
我有一个应用,targetSdkVersion = 23,compileSdkVersion = 23,主要活动设置如下
- HomeActivity (AppCompatActivity)
- FragmentA (V4 Fragment)
- ViewPager
- NestedFragmentA (V4 Fragment)
- NestedFragmentB (v4 Fragment)
- NestedFragmentC (v4 Fragment)
- NestedFragmentD (v4 Fragment)
- Fragment B (V4 Fragment)
- Fragment C (V4 Fragment)
在 HomeActivity 中
public static final String PERMISSION = Manifest.permission.WRITE_EXTERNAL_STORAGE
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
Log.i("Logger", "Request Code: " + String.valueOf(requestCode));
// Handle permission request result
}
我从@CommonsWare 阅读了这个答案,
https://stackoverflow.com/a/33170531/760363
嵌套片段中的 onRequestPermissionsResult 永远不会被调用(在我的情况下,它的结果将返回到 HomeActivity)但我很好,我会手动通知片段结果。
但问题是,当我在 HomeActivity 中请求许可时,一切正常。
HomeActivity
// Request permission from HomeActivity
// Supply 101 as request code, get 101 back
@Override
public void clickSomething(View v) {
requestPermissions(new String[]{PERMISSION}, 101);
}
// Logcat
Logger: Request Code: 101 <<< CORRECT
但是在FragmetnA或NestedFragmentA中,当我从嵌套的fragment中请求时,返回HomeActivity的requestCode发生了变化
片段A
// Request permission from FragmentA
// Supply 102 as request code, get 358 back
@Override
public void clickAnotherThing(View v) {
requestPermissions(new String[]{HomeActivity.PERMISSION}, 102);
}
// Logcat
Logger: Request Code: 358 <<< INCORRECT
NestedFragmentA
// Request permission from NestedFragmentA
// Supply 103 as request code, get 615 back
@Override
public void clickDifferentThing(View v) {
requestPermissions(new String[]{HomeActivity.PERMISSION}, 103);
}
// Logcat
Logger: Request Code: 615 <<< INCORRECT
你知道什么会导致这个问题吗?
【问题讨论】:
-
您不能从嵌套片段调用 requestpermission...请访问stackoverflow.com/questions/33169455/…
标签: android android-fragments android-permissions android-6.0-marshmallow