2016-09-29 56 views
0

我需要android-support-v4支持Android Marshmallow,因爲它包含對象PermissionChecker,並且如果用戶拒絕了應用程序權限(例如位置),它就是知道(在棉花糖上)的唯一方法。我看到C:\ Program Files文件(x86)\ Embarcadero \ Studio \ 18.0 \ lib \ android \ debug \ android-support-v4.jar,但在C:\ Program Files文件(x86中沒有看到任何PermissionChecker)。 )\ Embarcadero \ Studio \ 18.0 \ lib \ android \ debug \ classes.dex所以我想這是一箇舊的支持-v4,它在classes.dex中使用。FireMonkey有沒有什麼辦法可以使用搭配Marshmallow的android-support-v4?

有什麼辦法可以更新classes.dex來代替最新的android-support-v4嗎?

+0

我明白,那麼,在棉花糖,你不能使用定期的權限檢查,根據代碼,說我的答案在這裏的第二個列表:http://stackoverflow.com/a/39763742/2817399或者在我的答案中的第二個列表在這裏:http://stackoverflow.com/a/39642846/2817399? – blong

+0

@blong:更好地解釋:事實證明,清單中的targetSdkVersion必須是23,我的是22.如果您的目標SDK是23(Android 6),則默認情況下(在清單中)所有權限都被禁用,而如果您的目標SDK爲22(Android 5.1),並且您的應用在Android 6上運行,則在用戶安裝應用時默認啓用所有權限,並且即使用戶稍後撤銷權限,上述API返回不正確的值(這在我看來是一個錯誤)。 – loki

回答

1

這裏就是我所做的:

用於Java2OP反對在C Android的支持,v4.jar文件:\用戶\公用\文檔\ Embarcadero公司\工作室\ 18.0 \ PlatformSDKs \ Android的SDK-WINDOWS \臨時演員\ android \ support \ v4(您可能需要在Android SDK Manager的Extras部分下載Android支持庫),因爲PermissionChecker存在於該jar中。

已停用項目的「庫」節點中的android-support-v4.dex.jar。

添加了Android系統的支持,v4.jar(在步驟1中提到的)到項目

使用TJPermissionChecker.JavaClass.checkSelfPermission現在返回正確的結果,如果用戶拒絕了許可(即Android中6以上)

0

關於對發佈的問題的評論/問題的答案是「哦,我沒有嘗試過」,並且常規方法工作得很好,這裏是一個定期進行Android權限檢查的單元。

unit MiscU; 

interface 

function HasPermission(const Permission: string): Boolean; 

implementation 

uses 
    FMX.Helpers.Android, 
    Androidapi.Helpers, 
    Androidapi.JNI.JavaTypes, 
    Androidapi.JNI.GraphicsContentViewText; 

function HasPermission(const Permission: string): Boolean; 
begin 
    //Permissions listed at http://d.android.com/reference/android/Manifest.permission.html 
{$IF RTLVersion >= 30} 
    Result := TAndroidHelper.Context.checkCallingOrSelfPermission(
{$ELSE} 
    Result := SharedActivityContext.checkCallingOrSelfPermission(
{$ENDIF} 
    StringToJString(Permission)) = 
    TJPackageManager.JavaClass.PERMISSION_GRANTED 
end; 

end. 

如果它蒸發,我根本不知道的更現代的Android版本中的某些方面,該列表不是在所有相關的提問者正在試圖解決這個問題,我會刪除這個答案。

+0

感謝Blong!這個例子非常好,但它不適用於棉花糖。事實上,在設計上,在棉花糖上,用戶可以拒絕該應用的特定權限(如位置)。但爲了保持向後兼容性,應用程序不會知道此權限被拒絕(因爲在棉花糖之前這是不可能的,當我們安裝應用程序時,該應用程序具有所有權限並且用戶不能撤銷它們),而是應用程序將當它將調用被拒絕的功能時接收空值或默認值。所以得出結論,如果targetSdkVersion <23,那麼checkSelfPermission將始終返回true – loki

+0

讓您的代碼工作的唯一選擇是將targetSdkVersion更新爲23,但我不知道它是否與Firemonkey(和柏林)兼容。我開始一個新的線程詢問它:http://stackoverflow.com/questions/39772269/firemonkey-can-we-update-targetsdkversion-in-androidmanifest-template-xml – loki

相關問題