2016-09-30 46 views
0

我正在使用altbeacon庫監視和範圍信標。我已經閱讀了您的請求許可頁面,只是想知道,如果我針對API 23+()的位置權限,掃描將在具有API < 23的設備上工作嗎?我沒有真正的設備,所以無法測試它。或者是否有任何方法不要求使用API​​低於23的設備請求位置許可?感謝您的回答位置目標權限23

+0

爲什麼不使用虛擬設備進行測試?所有的API都可用。僅供參考,API 23對權限做了巨大的改變,從那裏開始,應該在運行時檢查權限,在此之前,這使用了清單,所以沒有理由阻止。 – AxelH

+0

虛擬設備無法使用藍牙,需要掃描信標。 –

+0

我的不好,但評論的其餘部分仍然存在。您需要針對之前的23和其他版本管理權限。 – AxelH

回答

0

再論的核心問題:

如果你建立具有的minSdkVersion < 23但targetSdkVersion一個應用程序> = 23當您嘗試掃描藍牙信標會發生什麼?

簡答:它的工作原理。

較長的答案:

  • 用戶權限要求不會發生。與minSdkVersion < 23,編譯器將阻止您包含一行代碼,如requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
,因爲它不會在早期的Android版本上運行。如果你將它包裝在一個像if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)這樣的if語句中,它將不會被執行。如果您添加註釋,例如@SuppressLint("NewApi"),則嘗試執行代碼時,應用程序將崩潰。

  • 無論用戶權限是否被授予,信標掃描都將在前臺和後臺工作。早期的Android版本無法向用戶請求權限,因此該應用的行爲就好像他們已經被授予了一樣。

+0

感謝,這是我正在尋找的答案! –

0

在Android 23上,您需要檢查應用程序是否已被授予「危險」權限,並且是否要求用戶。
Android支持庫爲此提供了輔助函數。
請參閱Requesting Permissions at Run Time。 主要功能是checkSelfPermissionrequestPermissions
爲了不與舊版本的Android的問題,你可以使用以下命令來檢查您是否運行棉花糖或沒有在設備上:

public static boolean isMNC() {  
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; 
} 

這將返回true如果您運行的棉花糖的設備上或更新,否則爲false。所以,如果這返回true,請檢查權限,否則不要。
您應該也可以在調用checkSelfPermissionrequestPermissions的函數上使用註釋@SuppressLint("NewApi")

+0

根據:[鏈接](https://altbeacon.github.io/android-beacon-library/requesting_permission.html)我不知道如果該庫將執行掃描信標,如果該權限僅適用於API 23 +。 。這就是我要求的:D –

+0

在Android Beacon庫2.9.1的AndroidManifest上看,它使用以下內容來包含ACCESS_COARSE_LOCATION權限: 這意味着僅在具有api 23及以上版本的設備上請求權限,所以在較低apis上不需要該權限。所以,它應該可以工作。這可能也幫助你:http://stackoverflow.com/questions/35988149/altbeacon-library-background-service/35988619#35988619 – jvlach