Android --- 动态获取定位权限时: Fragment 中 onRequestPermissionsResult 方法不执行
生活随笔
收集整理的這篇文章主要介紹了
Android --- 动态获取定位权限时: Fragment 中 onRequestPermissionsResult 方法不执行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天我在寫百度地圖 API 定位功能的時候遇到了這樣一個問題,需要在打開 APP 首頁的時候動態獲取定位權限,然后我的代碼是這樣寫的(在 Fragment 中)
@Nullablepublic View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {view = inflater.inflate(R.layout.fragment_home,container,false);Request();return view;}void Request() { // 動態獲取權限方法if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (ContextCompat.checkSelfPermission(getContext(),Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 200); // 200 是回調識別碼}else {//開始定位initLocation();}}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){case 200: // 剛才的識別碼if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ // 用戶同意權限,執行我們的操作initLocation(); // 開始定位}else{ // 用戶拒絕之后,當然我們也可以彈出一個窗口,直接跳轉到系統設置頁面Toast.makeText(getActivity(),"未開啟定位權限,請手動到設置去開啟權限",Toast.LENGTH_LONG).show();}break;default:break;}}然而 onRequestPermissionsResult 方法并沒有回調,沒有回調的話,我就不能執行定位方法,原因是
在Fragment中我們不能通過ActivityCompat.requestPermissions去請求,因為這樣請求Fragment不能收到onRequestPermissionsResult。所以我們應該直接用XXXFragment.this.requestPermissions去請求權限
如果你寫了 ActivityCompat.requestPermissions 那么你的回調方法就要寫到 Activity 中,我自己不信,就把 onRequestPermissionsResult 放到了 fragment 的父 Activity 中,果然,在 Activity 中回調了。
多謝博主指點:https://blog.csdn.net/z302766296/article/details/73549807
總結
以上是生活随笔為你收集整理的Android --- 动态获取定位权限时: Fragment 中 onRequestPermissionsResult 方法不执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android --- 解决 regis
- 下一篇: Android——应用图标微技巧,系统中