亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 MapFragment 中調用 onRequestPermissionResult 時

在 MapFragment 中調用 onRequestPermissionResult 時

繁花不似錦 2022-06-08 17:43:23
您好,我對此仍然很陌生,所以請幫助我了解為什么會出現此錯誤。我嘗試了很多解決方案,所以我將列出我所做的一切,因為我似乎無法理解為什么會發生這種情況。我創建了一個項目,它在 min SDK 21 上集成了 GoogleMaps,以在 SDK 28 上進行目標/編譯。我確實調用了 Manifesto 中所需的權限。我創建了一個擴展 MapFragment 類的文件,一切似乎都運行良好。我能夠檢查并請求用戶位置的權限(該框確實顯示),但是當我調用 onRequestPermissionResult 方法時,它的顯示方式有所不同,并給我一個錯誤提示“錯誤:找不到符號類 NonNull ”:@Overridepublic void onRequestPermissionsResult(int requestCode, @androidx.annotation.NonNull String[] permissions, @androidx.annotation.NonNull int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);} 在我的其他 Fragment (android.support.v4.app) 類中,@androidx.annotation.NonNull 是 @NonNull。我首先想到也許我需要將實現 'com.android.support:support-annotations:28.0.0'添加到 build.gradle,但事實并非如此。然后,我嘗試將 @androidx.annotation.NonNull 替換為 @NonNull ,這使錯誤消失了,但是每當我單擊允許或拒絕時,它都沒有達到 onRequestPermissionResult 方法。我創建了一個檢查權限的方法,但它不會讓我在不檢查構建是否大于或等于 SDK 23 的情況下自行使用 requestPermission,但我的最小 SDK 是 21。所以我只是檢查構建是否大于或等于 21 并使用 ActivityCompat 獲取 requestPermission 方法并且它可以工作。它會檢查并請求許可,所以我想也許 onRequestPermissionResult 只能在 MainActivity 中工作,這是我不想要的。我希望能夠在檢查請求是否在 MapFragment 中被授予后調用一個方法。是因為 android.support.v4.app 不支持 MapFragment 嗎?它看起來像這樣: private boolean checkAskPermission(int requestCode, String permissionString){    if(Build.VERSION.SDK_INT >= 21){        int permission = ContextCompat.checkSelfPermission(mContext, permissionString);        if(permission!=PackageManager.PERMISSION_GRANTED){            ActivityCompat.requestPermissions(getActivity(), new String[]{permissionString}, requestCode);            return false;        }    }    return true;}在這一點上,我不知道還能嘗試什么。我想當我將 @androidx.annotation.NonNull 更改為 @NonNull 以便能夠使用它時,我可能沒有正確檢查 onRequestPermissionResult 中的權限,但是當我使用中斷時該方法沒有命中。請留下詳細的答復,以便我完全理解我的問題。我已經堅持了一天。只是將@androidx.annotation.NonNull 更改為@NonNull,現在它命中了該方法。感謝 Eugene 清理 SDK 權限。只有 SDK 23 及更高版本需要權限。
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

導入該注釋類:

import androidx.annotation.NonNull;

這要么來自這種依賴關系:

implementation "androidx.annotation:annotation:1.0.0"

或來自此依賴項,以防尚未使用androidx

implementation "com.android.support:support-annotations:28.0.0"

然后你可以像往常一樣使用它:

 @NonNull


查看完整回答
反對 回復 2022-06-08
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

我發現唯一有用的解決方法是放棄react-native run-android命令并手動進入ProjectHome/node_modules/ModuleIWantToChange/android/src/main/java/FileToChange.java正在導入的 react-native 庫(對我來說:)androidx.annotation.NonNull,將依賴項更改為android.support.annotation.NonNull,然后確保使用com.android.support:support-annotations“依賴項”下進行編譯在那個 node_module 的“android/build.gradle”文件中。就我而言,我使用的是“com.android.support:support-annotations:25.3.1”版本。你必須確保你有你在這里調用的版本??纯茨阍?code>$ANDROID_HOME/extras/android/m2repository/com/android/support/support-annotations.

然后,我沒有使用 react-native run-android,而是移至項目主目錄下的 android 目錄并運行sudo ./gradlew --stacktrace installDebug(stacktrace 是可選的)以在我的模擬器/設備上構建和安裝 apk。

這可能不適用于所有人,但在我的情況下這是一個可以容忍的解決方法。


查看完整回答
反對 回復 2022-06-08
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

[...] 但是當我在它上面使用 break 時,該方法沒有成功。

[...] 使用 ActivityCompat 來獲取 requestPermission [...]

你在一個片段中。不要向 Activity 請求權限。如果您詢問片段,您還會在片段中獲得回調。

requestPermissions(new String[]{permissionString}, requestCode);

API 23 中引入了運行時權限(這就是該方法僅在 API 23 之后可用的原因)。修復你的狀況。在此之前擁有清單中聲明的權限就足夠了。

題外話:平臺片段已被棄用。請改用支持片段。擴展SupportMapFragment.

@androidx.annotation.NonNull找不到,因為您的項目中沒有使用 AndroidX。您可以使用任何其他@NonNull可用的注釋(來自 SDK 或來自支持庫)。


查看完整回答
反對 回復 2022-06-08
  • 3 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號