블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Android 13에서 Runtime에 android.permission.POST_NOTIFICATIONS Permission 요청하기.

----

 

1. Android Target API 33으로 셋팅

 

2. AndroidManifest.xml에 POST_NOTIFICATIONS Permission 추가

<manifest ...>
    <application ...>
        ...
    </application>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
</manifest>

 

3. 권한 요청 원하는 시점에 아래 함수 호출(함수 호출하면 Android 13이상 폰에서는 알림 권한 허용 요청 팝업이 뜸)

void CheckPermission_PostNotifications_Android13()
{
    // 디바이스의 안드로이드 api level 얻기
    // ex) Prints "Android OS API-33" on Android 13.0
    // https://docs.unity3d.com/ScriptReference/SystemInfo-operatingSystem.html
    string androidInfo = SystemInfo.operatingSystem;
    Debug.Log("androidInfo: " + androidInfo);
    
    int apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 3), System.Globalization.CultureInfo.InvariantCulture);
    Debug.Log("apiLevel: " + apiLevel);

    // 디바이스의 api level이 33 이상이라면 퍼미션 요청
    if (33 <= apiLevel 
        && !UnityEngine.Android.Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
    {
        UnityEngine.Android.Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
    }
}

 

 

-----------------------------------------------------------------------------------------

[참고]

안드로이드 알림은 api level 26 과 33 에서 변경점이 있다. 내 앱이 대상으로 삼은 Sdk Version 범위에 이 버전이 포함되어 있다면 버전에 따라 분기 처리를 해주는 편이 좋다.
API level 26 (Android 8.0 Oreo) 이상 변경점
API level 33 (Android 13 Tiramisu) 이상 변경점

public void InitializeAndroidLocalPush()
{
	// 디바이스의 안드로이드 api level 얻기
	string androidInfo = SystemInfo.operatingSystem;
	Debug.Log("androidInfo: " + androidInfo);
	apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 2));
	Debug.Log("apiLevel: " + apiLevel);

	// 디바이스의 api level이 33 이상이라면 퍼미션 요청
	if (apiLevel >= 33 &&
		!Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
	{
		Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
	}

	// 디바이스의 api level이 26 이상이라면 알림 채널 설정
	if (apiLevel >= 26)
	{
		var channel = new AndroidNotificationChannel()
		{
			Id = CHANNEL_ID,
			Name = "pubSdk",
			Importance = Importance.High,
			Description = "for test",
		};
		AndroidNotificationCenter.RegisterNotificationChannel(channel);
	}
}

api level 얻기 코드 출처

 

 

[참고 내용 출처]

https://velog.io/@maratangsoft/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1%EC%97%90%EC%84%9C-FCM-%EC%84%9C%EB%B2%84-%ED%91%B8%EC%8B%9C-%EB%B0%9B%EA%B8%B0

 

유니티 안드로이드 앱에서 FCM 서버 푸시 받기

유니티 모바일 앱 개발시 안드로이드 앱은 Firebase Cloud Messaging(이하 FCM) 서비스, iOS 앱은 Apple Push Notification 서비스를 이용해서 (FCM으로도 가능) 푸시를 수신할 수 있다. 그 중 FCM을 이용한 안드로

velog.io

 

[참고]

https://android-developer.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C13%EC%97%90%EC%84%9C-Notification-%ED%97%88%EA%B0%80-%EB%B0%9B%EA%B8%B0-%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EB%B3%80%EA%B2%BD%EC%A0%90

 

안드로이드13에서 Notification 허가 받기 방법 및 변경점

안드로이드13에서 Notification에 대해 바뀐점 POST_NOTIFICATIONS (Notification Permission) 은 Target SDK API 33 이상부터 추가 가능 Target SDK API 32 이하의 앱이 Android 13 디바이스에 설치되면 Notification Channel을 등록

android-developer.tistory.com

반응형
Posted by blueasa
, |

[참조] https://mentum.tistory.com/150

 

유니티 퍼미션 체크 적용기. (Unity Permission Check) 2019.11.14 재작성.

2019.11.14 재작성. 유니티 안드로이드에서 스크린샷을 저장하기 위해 권한 부분을 다시 작성해야해서 하는 김에 이 글도 재작성 하였다. 2019/11/14 - [Unity/프로그래밍] - 유니티 안드로이드 스크린샷

mentum.tistory.com

 

 

참조 사이트에 포스팅 된 내용을 참고해서 나한테 맞게 만듬.

(Unity2018 / 저장공간(선택) 권한만 필요)

 

using System;
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.Assertions;
using UnityEngine.Android;

public class UICheckPermissionManagerSGT : MonoBehaviour
{
    public GameObject m_panelCheckPermission = null;
    public GameObject m_panelDeniedConfirm = null;

    private bool m_bOnCheckPermission = false;


    void Start()
    {
        Debug.Log("[Scene] CheckPermission");

        InitCheckPermission();
        CheckCountryCode_KR();
    }

    void InitCheckPermission()
    {
        m_bOnCheckPermission = false;

        ActivateCheckPermission(false);
        ActivateDeniedConfirm(false);

    }

    void CheckCountryCode_KR()
    {
        // GetIP가 한국인지 체크하는 외부 함수
        SGT.Global.CheckCountryCode_KR(ConfirmCountryCode_KR);
    }

    void ConfirmCountryCode_KR(bool _bIsCountryCode_KR)
    {
        if (true == _bIsCountryCode_KR)
        {
            // 한국 : Permission 확인
            DoCheckPermission();

            //CallPermission();
        }
        else
        {
            // No 한국 : Next Scene으로 이동
            GoToNextScene();
        }
    }

    void DoCheckPermission()
    {
        // 저장공간(Write) 권한 체크(선택 권한)
        if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite) == false)
        {
            // 지정된 권한이 없으면 CheckPermission UI 활성화
            ActivateCheckPermission(true);
        }
        else
        {
            GoToNextScene();
        }
    }

    IEnumerator CheckPermissionCoroutine()
    {
        m_bOnCheckPermission = true;

        yield return new WaitForEndOfFrame();

        // 저장공간(Write) 권한 체크(선택 권한)
        if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite) == false)
        {
            // 권한 요청
            Permission.RequestUserPermission(Permission.ExternalStorageWrite);

            yield return new WaitForSeconds(0.2f); // 0.2초의 딜레이 후 focus를 체크하자.
            yield return new WaitUntil(() => Application.isFocused == true);

            if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite) == false)
            {
                // 권한 거절하면 안내 팝업
                OnEventDenied();
                yield break;
            }
        }

        // 권한이 있으면 다음 Scene으로 이동
        GoToNextScene();

        m_bOnCheckPermission = false;
    }


    // 해당 앱의 설정창을 호출한다.(권한 설정할 수 있도록 유도)
    // https://forum.unity.com/threads/redirect-to-app-settings.461140/
    private void OpenAppSetting()
    {
        try
        {
#if UNITY_ANDROID
            using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            using (AndroidJavaObject currentActivityObject = unityClass.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                string packageName = currentActivityObject.Call<string>("getPackageName");

                using (var uriClass = new AndroidJavaClass("android.net.Uri"))
                using (AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("fromParts", "package", packageName, null))
                using (var intentObject = new AndroidJavaObject("android.content.Intent", "android.settings.APPLICATION_DETAILS_SETTINGS", uriObject))
                {
                    intentObject.Call<AndroidJavaObject>("addCategory", "android.intent.category.DEFAULT");
                    intentObject.Call<AndroidJavaObject>("setFlags", 0x10000000);
                    currentActivityObject.Call("startActivity", intentObject);
                }
            }
#endif
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
    }

    void ActivateDeniedConfirm(bool _bActive)
    {
        GgUtil.Activate(m_panelDeniedConfirm, _bActive);
    }

    void ActivateCheckPermission(bool _bActive)
    {
        GgUtil.Activate(m_panelCheckPermission, _bActive);
    }

    void GoToNextScene()
    {
        // 패치씬으로 이동
        SGT.Scene.RunCheckPermissionToPatch();
    }

    //////////////////////////////////////////////////////////////////////////
    // Event
    //////////////////////////////////////////////////////////////////////////

    void OnEventCheckPermission()
    {
        if (true == m_bOnCheckPermission)
            return;

        StopCoroutine("CheckPermissionCoroutine");
        StartCoroutine("CheckPermissionCoroutine");
    }

    void OnEventDenied()
    {
        ActivateDeniedConfirm(true);
    }

    void OnEventDeniedConfirm()
    {
        // 저장공간은 선택권한이라 권한요청 거절해도 게임 진행
        GoToNextScene();
    }

    //////////////////////////////////////////////////////////////////////////
    // UI Event
    //////////////////////////////////////////////////////////////////////////

    // 권한 동의 버튼
    public void OnUIEventCheckPermission()
    {
        if (SGT.Global.bPreventDoubleClick)
            return;

        SGT.Global.PreventDoubleClick();

        OnEventCheckPermission();
    }

    // 거절 확인
    public void OnUIEventDeniedConfirm()
    {
        OnEventDeniedConfirm();
    }

    // 권한 설정 열기
    public void OnUIEventOpenAppSetting()
    {
        OpenAppSetting();
    }
}

 

반응형
Posted by blueasa
, |

Easy Way

I think this easier approach applies if your Unity project is being built with gradle. If it isn't, here is one more reason to upgrade.

Also, a big shout-out to an article called, Hey, Where Did These Permissions Come From?)

  1. Build Your Project
  2. Open the file /path/to/my/project/Temp/gradleOut/build/outputs/logs/manifest-merger-release-report.txt
  3. Profit!
  4. Search the file for the name of your permission, and it'll show you where it came from.

Here is part of the file, where I'm looking for the WRITE_EXTERNAL_STORAGE permission.

uses-permission#android.permission.WRITE_EXTERNAL_STORAGE ADDED from /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/src/main/AndroidManifest.xml:7:3-79 MERGED from [gradleOut:IronSource:unspecified] /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/IronSource/build/intermediates/bundles/default/AndroidManifest.xml:13:5-81 android:name ADDED from /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/src/main/AndroidManifest.xml:7:20-76

Hard Way

There are three ways permissions get added to your project.

  1. They are specified in an Android Manifest file.
  2. They are specified in library (a .aar file).
  3. Unity adds the permission when you use a certain feature. (Added)

My examples use command-line tools on a Mac. I don't know Windows equivalents, but it is possible to find and run unix tools there (using the linux subsystem for windows 10, cygwin, custom binaries, etc.)

1. Find all permissions used in (uncompressed) Android Manifests.

cd /path/to/my/project/Assets grep -r "uses-permission" --include "AndroidManifest.xml" .

This will find all files named AndroidManifest in the current folder (.) or any of its subfolders (-rtells it to search recursively) and spit out any line with the words 'uses-permission'.

In my current project, I get output something like this:

./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> ./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ./Plugins/Android/AndroidManifest.xml: <uses-permission ./Plugins/Android/IronSource/AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ./Plugins/Android/IronSource/AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. Find the permissions required in Android Libraries

Your project likely contains android libraries (.aar files) and java archives (.jar files). Some android libraries contain an android manifest and specify permissions needed to use the library. (I don't think .jar files actually do this, but .aar files absolutely do). Both .aar and .jar files are .zip files, with a different extension and with specific metadata in specific places.

Find them by running:

find . -iname "*.?ar" -print -exec zipgrep "uses-permission" "{}" "AndroidManifest.xml" ";" 2> /dev/null

Here's what this does. It finds any file (in the current folder (.) and its subfolders) has an extension of (something) a r, thus .jar, or .aar (-name "*.?ar"). It outputs the archive's file name (-print). It then runs zipgrep (-exec). Zipgrep is told to search through any files in the archive ({}) named "AndroidManifest.xml", and output any line with the words "uses-permission". We then pipe the errors to the bit bucket (2> /dev/null) so we don't see lots of errors about archives that don't have android manifests in them.

An example output looks like this:

./OneSignal/Platforms/Android/onesignal-unity.aar AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> AndroidManifest.xml: <uses-permission android:name="android.permission.WAKE_LOCK" /> AndroidManifest.xml: <uses-permission android:name="android.permission.VIBRATE" /> ... ./Plugins/Android/android.arch.core.common-1.1.0.jar ./Plugins/Android/android.arch.core.runtime-1.1.0.aar ./Plugins/Android/android.arch.lifecycle.common-1.1.0.jar ... ./Plugins/Android/com.google.android.gms.play-services-gcm-11.8.0.aar AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> ./Plugins/Android/com.google.android.gms.play-services-gcm-license-11.8.0.aar ./Plugins/Android/com.google.android.gms.play-services-iid-11.8.0.aar AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> ./Plugins/Android/com.google.android.gms.play-services-iid-license-11.8.0.aar ...

The filenames all start with periods. I can thus see, for example, that the onesignal-unity.aar sets several permissions, several .jar files were searched with no permissions inside them, and some of the play services libraries specify permissions.

If I needed to change a library, I could rename the .aar to .zip, extract it, edit it, compress it, and rename it back. (It isn't necessarily wise to change the permissions inside a library, but possible.)

3. Unity Adds the Permission

I didn't have anything to add on this; as said above, if you use the Microphone API, Unity will add a permission for you so your app will work.

However, I've since realized that you can do the following:

  • bring up the Build Settings for Android
  • tick the 'Export Project' box
  • Export the project, noting the location
  • go to /my/project/export/src/main/AndroidManifest.xml. This is what Unity emits for the android manifest (before google's tools do all the merging).
  • compare it (using your favourite diff tool) to Assets/plugins/Android/AndroidManifest.xml; the differences come from Unity.

 

[출처]

https://stackoverflow.com/questions/40931058/how-to-find-source-of-a-permission-in-unity-android

 

How to find source of a permission in Unity Android

Note: This question is specific to Unity3D I have a very clean android manifest file in Unity project under Plugins/Android/ folder with no tag at all. I believe that some

stackoverflow.com

 

반응형
Posted by blueasa
, |

[링크]

https://mentum.tistory.com/150

 

유니티 퍼미션 체크 적용기. (Unity Permission Check)

2019.02.12 다른방식으로 포스트 재 작성 [주의] OBB를 사용하는 Split 빌드의 경우 반드시 저장소 권한을 획득해야함. [주의] 유니티 2018.3 부터 퍼미션체크가 내장되었습니다. 2018.3부터는 플러그인 필요없습..

mentum.tistory.com

 

반응형
Posted by blueasa
, |

안드로이드 권한(Permisstion) 종류


사이트에가서 권한에 대한 정리를 해보았습니다. 짧은 영어로 해석한거라 의미가 애매하네요.

정확한 의미, 언제 사용 하는지 등을 아시는분은 댓글좀 달아주세요..


출처 : http://developer.android.com/reference/android/Manifest.permission.html


Constants
 ACCESS_CHECKIN_PROPERTIES

체크인데이터베이스의 속성테이블의 

읽고 쓰기 권한

 ACCESS_COARSE_LOCATION

코드(coarse)위치 권한(Cell-ID, WIFI)

gps사용시 선언.

 ACCESS_FINE_LOCATION파인위치(find  location) 허용(gps)
gps사용시 선언.
 ACCESS_LOCATION_EXTRA_COMMANDS추가적인 위치 제공(?)
gps사용시 선언해야함.
 ACCESS_MOCK_LOCATION

테스트용 mock 위치 제공자 생성
gps사용시 선언해야함.

 ACCESS_NETWORK_STATE네트워크 정보에 접근
 ACCESS_SURFACE_FLINGER하위 수준의 서페이스핑거를 사용
 ACCESS_WIFI_STATEwifi 정보에 접근
 ACCOUNT_MANAGERAllows applications to call into 
AccountAuthenticators.
 ADD_VOICEMAIL음성 이메일 추가 권한

AUTHENTICATE_ACCOUNTSAllows an application to act as 
an AccountAuthenticator for 
the AccountManager
 BATTERY_STATS

베터리 상태 권한

 BIND_APPWIDGET 
 BIND_DEVICE_ADMIN 
 BIND_INPUT_METHOD 
 BIND_REMOTEVIEWS 
 BIND_TEXT_SERVICE 
 BIND_VPN_SERVICE
 BIND_WALLPAPER

Live WallPaper를 서비스에서 

돌릴때 사용하였음.

 BLUETOOTH블루투스
 BLUETOOTH_ADMIN

블루투스 어드민

 BRICK

very dangerous!

 BROADCAST_PACKAGE_REMOVED제거된 app 패키지에 대한 
노티 브로드케스트
 BROADCAST_SMS

SMS 관련 권힌

 BROADCAST_STICKYbroadcast sticky intents.
 BROADCAST_WAP_PUSHAllows an application to broadcast 
a WAP PUSH receipt notification
 CALL_PHONE

전화 통화


CALL_PRIVILEGED

전화 통화

긴급통화 포함

 CAMERA

카메라 권한

 CHANGE_COMPONENT_ENABLED_STATE

CHANGE_CONFIGURATION

Configuration 관련 권한

 CHANGE_NETWORK_STATE

인터넷(네트워크) 권한

 CHANGE_WIFI_MULTICAST_STATEAllows applications to enter 
Wi-Fi Multicast mode
 CHANGE_WIFI_STATEWIFI 사용 권한
 CLEAR_APP_CACHE설치된 앱 캐쉬 
삭제 권한
 CLEAR_APP_USER_DATA유저 데이터 삭제 권한
 CONTROL_LOCATION_UPDATES

위치정보 갱신 권한
gps사용시 선언

 DELETE_CACHE_FILES캐시파일 제거권한
 DELETE_PACKAGES패키지 삭제 권한
 DEVICE_POWERAllows low-level access 
to power management
 DIAGNOSTIC

Allows applications to RW to 
diagnostic resources.

 DISABLE_KEYGUARDAllows applications to 
disable the keyguard
 DUMP

EXPAND_STATUS_BAR상태표시줄 확장 권한
 FACTORY_TESTRun as a manufacturer test 
application, running as the 
root user.
 FLASHLIGHT플래시라이트 권한
 FORCE_BACKAllows an application to force 
a BACK operation on whatever 
is the top activity.
 GET_ACCOUNTS
 GET_PACKAGE_SIZE패키지 사용 공간 관련 권한
 GET_TASKS태스트 관련 권한
 GLOBAL_SEARCH

HARDWARE_TESTAllows access to 
hardware peripherals.
 INJECT_EVENTS

INSTALL_LOCATION_PROVIDER

INSTALL_PACKAGES패키지설치 권한
 INTERNAL_SYSTEM_WINDOW

INTERNET인터넷 권한
 KILL_BACKGROUND_PROCESSESAllows an application to call 
killBackgroundProcesses(String).
 MANAGE_ACCOUNTS

MANAGE_APP_TOKENSAllows an application to manage 
(create, destroy, Z-order) 
application tokens in the 
window manager.
 MASTER_CLEAR
 MODIFY_AUDIO_SETTINGS오디오 관련 권한
 MODIFY_PHONE_STATE폰상태 관련 권한
 MOUNT_FORMAT_FILESYSTEMS파일 시스템 권한
 MOUNT_UNMOUNT_FILESYSTEMS파일 시스템 권한
 NFCNFC관련 권한
 PERSISTENT_ACTIVITYThis constant is deprecated. 
 PROCESS_OUTGOING_CALLS

전화 발신 체크 권한

 READ_CALENDAR

캘린더 관련 권한

 READ_CONTACTS주소록 관련 권한
 READ_FRAME_BUFFER프레임 버퍼 관련 권한

READ_HISTORY_BOOKMARKS웹 즐겨찾기 등 권한
 READ_INPUT_STATE입력 상태 관련 권한(키보드)
 READ_LOGS로그 관련 권한

READ_PHONE_STATE폰상태 관련 권한
 READ_PROFILE사용자 프로파일 관련 권한
 READ_SMSSMS문자 관련 권한
 READ_SOCIAL_STREAM
 READ_SYNC_SETTINGS
 READ_SYNC_STATS
 REBOOT재부틱 관련 권한
 RECEIVE_BOOT_COMPLETED부팅완료 관련 권한
 RECEIVE_MMSMMS 수신 관련 권한
 RECEIVE_SMSSMS(문자) 수신 관련 권한
 RECEIVE_WAP_PUSHWAP 푸시 권한
 RECORD_AUDIO

오디오 녹음 권한

 REORDER_TASKS태스크 z오더
 RESTART_PACKAGESThis constant is deprecated.

SEND_SMS

SMS(문자)보내기 권한

 SET_ACTIVITY_WATCHER

액티비티 감시등 권한

 SET_ALARM알람 관련 권한
 SET_ALWAYS_FINISH

액티비티 관리(종료) 권한

 SET_ANIMATION_SCALEModify the global animation 
scaling factor.
 SET_DEBUG_APPConfigure an application 
for debugging.
 SET_ORIENTATION화면 방향 지정 권한

SET_POINTER_SPEEDAllows low-level access to 
setting the pointer speed.
 SET_PREFERRED_APPLICATIONSThis constant is deprecated.
 SET_PROCESS_LIMIT실행 프로세스 제한 권한
 SET_TIME

시간 관리 권한

 SET_TIME_ZONE타임존 관리 권한
 SET_WALLPAPER배경화면 관리 권한
 SET_WALLPAPER_HINTS배경화면 힌트 관리 권한

SIGNAL_PERSISTENT_PROCESSESAllow an application to request that
 a signal be sent to all persistent 
processes
 STATUS_BAR

상태표시줄 관련 권한

 SUBSCRIBED_FEEDS_READ

SUBSCRIBED_FEEDS_WRITE
 SYSTEM_ALERT_WINDOW

UPDATE_DEVICE_STATSAllows an application to update 
device statistics.
 USE_CREDENTIALSAllows an application to request 
authtokens from the AccountManager
 USE_SIPAllows an application to use 
SIP service
 VIBRATE

진동 관련 권한

 WAKE_LOCK화면 켜기 관련 권한(알람.)

WRITE_APN_SETTINGSAPN 쓰기 관련 권한
 WRITE_CALENDAR캘린더 쓰기 관련 권한

WRITE_CONTACTS주소록 쓰기 관련 권한
 WRITE_EXTERNAL_STORAGE외부저장장치 관련 권한
 WRITE_GSERVICES

Allows an application to modify 
the Google service map.

 WRITE_HISTORY_BOOKMARKS

웹 즐겨찾기등 쓰기 권한

(not read)

 WRITE_PROFILE

사용자프로필쓰기 권한

not read

 WRITE_SECURE_SETTINGS
 WRITE_SETTINGS시스템 설정 쓰기 권한
 WRITE_SMSSMS(문자) 쓰기 권한
 WRITE_SOCIAL_STREAM

WRITE_SYNC_SETTINGS



출처: http://jwandroid.tistory.com/153 [초보 플밍지기]

반응형
Posted by blueasa
, |