2

我有一個Android代碼,可以在Android 5.0版本上運行良好。我AndroidManifest.xml我們需要在Android 6.0運行時需要哪些權限

<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BROADCAST_STICKY" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

然而,我的客戶誰採用了Android 6.0(LG G5)報告應用不能很好地工作。我沒有LG G5來檢查是什麼問題。在我看來,我認爲原因是權限從5.0改爲6.0。你能看看我的許可,並給我一些改進/糾正它的Android 6.0?或者我們有什麼方法可以自動爲Android 6.0添加權限。感謝所有

+0

你有針對性的API版本23? – Ramit

+0

是的。首先,我在Android 5.0(21〜22)中測試了它,並沒有問題。現在,我想更改目標API版本23 – Jame

+0

WRITE_EXTERNAL_STORAGE是一個危險的權限。請檢查https://developer.android.com/guide/topics/security/permissions.html中的危險權限列表 – Ramit

回答

2

Android 6.0,這包括:

ACCESS_COARSE_LOCATION 
ACCESS_FINE_LOCATION 
ADD_VOICEMAIL 
BODY_SENSORS 
CALL_PHONE 
CAMERA 
GET_ACCOUNTS 
PROCESS_OUTGOING_CALLS 
READ_CALENDAR 
READ_CALL_LOG 
READ_CELL_BROADCASTS 
READ_CONTACTS 
READ_EXTERNAL_STORAGE 
READ_PHONE_STATE 
READ_SMS 
RECEIVE_MMS 
RECEIVE_SMS 
RECEIVE_WAP_PUSH 
RECORD_AUDIO 
SEND_SMS 
USE_SIP 
WRITE_CALENDAR 
WRITE_CALL_LOG 
WRITE_CONTACTS 
WRITE_EXTERNAL_STORAGE 

對於這些權限,不僅你的targetSdkVersion 23+的應用程序需要有元素(一個或多個),但你也必須在索要這些權限使用checkSelfPermission()和requestPermissions()等方法從Android 6.0+設備上的用戶運行。

How to ask permission link

+0

謝謝。那麼我需要的是通過編程來請求許可。它會詢問用戶,然後自動添加我的應用程序。這樣對嗎?當應用程序再次運行時,它會再次提問嗎? – Jame

+0

你好user8430,這個問題是關於列表,所以首先批准你回答並打開另一個問題,如何獲得許可,我會幫你在那裏,最好的運氣兄弟:) –

+0

我upvote你的答案。我不知道是誰低估了它 – Jame

1
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

這些危險權限,您需要在運行時,要求他們在API級別23+

危險權限的完整列表可以在here找到。

查看開發者指南Requesting Permissions at Run Time

+0

因此,而不是在'AndroidManifest.xml'文件中添加兩個以上的權限。我必須使用requestPermission()函數來添加這些權限onCreate()函數。這樣對嗎? – Jame

+1

對於API級別較低的設備,您還需要在Manifest中使用它們。在onCreate()中請求它們並不是強制性的,只是在調用任何需要它們的函數之前請求它們。 – earthw0rmjim

1

在您的應用程序必須採取運行時的權限不在應用程序安裝時。 android.permission.WRITE_EXTERNAL_STORAGE是一個危險的許可,根據你可以檢查這個文件Dyanamic permission in 6.0

1

在Android Marshmallow權限管理是完全不同的以前的版本。如果您定位API 23,則必須請求用戶允許該應用程序提供此權限。

看看到: Android permissions

我認爲(未測試),如果設置API 22或更低,雖然安裝該應用程序使用Android的設備,你將不會有權限的問題6.0+

1

Android 6改進了Android處理應用程序權限的方式,如果您的應用程序需要危險權限(完整列表https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous),您需要檢查權限運行時,因此在清單中定義權限是不夠的。 這個新權限管理的原因與android用戶可以啓用/禁用應用程序權限運行時相關,因此您的代碼需要了解特定功能(攝像頭,gps等)默認情況下不會被授予,並且可能隨時間而改變。

有許多庫,幫助您管理應用程序的權限,我想得最多的是權限接線員:https://github.com/hotchemi/PermissionsDispatcher

而且看看官方文檔在這裏:https://developer.android.com/training/permissions/requesting.html

相關問題