728x90
앱상에서 권한을 준항목들이
오레오 버전 부터는 몇몇 특정 권한들이 권한이 빠지고 다시 사용자에게 권한허용을 받아야합니다.
만약 오레오 이전 버전에 잘 동작하던게 오레오 버전에서 동작하지 않는다면
권한으로 인해 먼가 동작하지 않는지 의심해 봐야합니다.
아래는 Xamarin.Android 에서 권한을 체크하고 권한이 없는 항목에 대해서
권한 허용을 요청하는 코드입니다.
(제가 문제가 되었던 권한는 android.permission.READ_SMS, android.permission.WRITE_EXTERNAL_STORAGE,android.permission.SEND_SMS 입니다.)
// 권한이 없어 권한허용을 물어볼 항목들
List<string> permissions = new List<string>();
// 권한이 있는지 확인할 항목들
List<string> checkPermissions = new List<string>();
checkPermissions.Add(Manifest.Permission.AccessNetworkState);
checkPermissions.Add(Manifest.Permission.Internet);
checkPermissions.Add(Manifest.Permission.WriteSms);
checkPermissions.Add(Manifest.Permission.BroadcastSms);
checkPermissions.Add(Manifest.Permission.BroadcastWapPush);
checkPermissions.Add(Manifest.Permission.ReceiveBootCompleted);
checkPermissions.Add(Manifest.Permission.ReceiveMms);
checkPermissions.Add(Manifest.Permission.ReceiveSms);
checkPermissions.Add(Manifest.Permission.SendSms);
checkPermissions.Add(Manifest.Permission.WriteExternalStorage);
checkPermissions.Add(Manifest.Permission.ReadSms);
// 권한이 있는지 확인하고 없다면 체크할 목록에 추가합니다.
foreach (var checkPermission in checkPermissions)
{
if (ContextCompat.CheckSelfPermission(this, checkPermission) != (int)Permission.Granted)
{
permissions.Add(checkPermission);
}
}
// 권한없는 항목에 대해서 추가 허용을 할지 물어보는 팝업을 띄웁니다.
ActivityCompat.RequestPermissions(this, permissions.ToArray(), 1);
List<string> permissions = new List<string>();
// 권한이 있는지 확인할 항목들
List<string> checkPermissions = new List<string>();
checkPermissions.Add(Manifest.Permission.AccessNetworkState);
checkPermissions.Add(Manifest.Permission.Internet);
checkPermissions.Add(Manifest.Permission.WriteSms);
checkPermissions.Add(Manifest.Permission.BroadcastSms);
checkPermissions.Add(Manifest.Permission.BroadcastWapPush);
checkPermissions.Add(Manifest.Permission.ReceiveBootCompleted);
checkPermissions.Add(Manifest.Permission.ReceiveMms);
checkPermissions.Add(Manifest.Permission.ReceiveSms);
checkPermissions.Add(Manifest.Permission.SendSms);
checkPermissions.Add(Manifest.Permission.WriteExternalStorage);
checkPermissions.Add(Manifest.Permission.ReadSms);
// 권한이 있는지 확인하고 없다면 체크할 목록에 추가합니다.
foreach (var checkPermission in checkPermissions)
{
if (ContextCompat.CheckSelfPermission(this, checkPermission) != (int)Permission.Granted)
{
permissions.Add(checkPermission);
}
}
// 권한없는 항목에 대해서 추가 허용을 할지 물어보는 팝업을 띄웁니다.
ActivityCompat.RequestPermissions(this, permissions.ToArray(), 1);
위 코드를 추가하면 앱 실행시 아래처럼 허용을 묻는 팝업이 뜹니다.
없던 권한이 3가지 인데 알아서 권한을 묶을수 있는것 들은 묶어서 팝업이 뜨는것 같네요
다시 말하지만 기존에 AndroidManifest.xml 에 권한이 포함되있더라도
오레오버전부터는 문제가 되는 권한들이 있으므로 위 작업이 필요합니다.
참고
https://developer.android.com/about/versions/oreo/android-8.0-changes?hl=ko
728x90