안드로이드에서 사용할 수 있는 permission 종류

<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCOUNT_MANAGER"/>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.BIND_APPWIDGET"/>
<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN"/>
<uses-permission android:name="android.permission.BIND_INPUT_METHOD"/>
<uses-permission android:name="android.permission.BIND_WALLPAPER"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BRICK"/>
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED"/>
<uses-permission android:name="android.permission.BROADCAST_SMS"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<uses-permission android:name="android.permission.BROADCAST_WAP_PUSH"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.CALL_PRIVILEGED"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
<uses-permission android:name="android.permission.DELETE_CACHE_FILES"/>
<uses-permission android:name="android.permission.DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.DIAGNOSTIC"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.DUMP"/>
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
<uses-permission android:name="android.permission.FACTORY_TEST"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.FORCE_BACK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.GLOBAL_SEARCH"/>
<uses-permission android:name="android.permission.HARDWARE_TEST"/>
<uses-permission android:name="android.permission.INJECT_EVENTS"/>
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_APP_TOKENS"/>
<uses-permission android:name="android.permission.MASTER_CLEAR"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.PERSISTENT_ACTIVITY"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_FRAME_BUFFER"/>
<uses-permission android:name="android.permission.READ_HISTORY_BOOKMARKS"/>
<uses-permission android:name="android.permission.READ_INPUT_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_SYNC_STATS"/>
<uses-permission android:name="android.permission.REBOOT"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.REORDER_TASKS"/>
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"/>
<uses-permission android:name="android.permission.SET_ALWAYS_FINISH"/>
<uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/>
<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
<uses-permission android:name="android.permission.SET_ORIENTATION"/>
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"/>
<uses-permission android:name="android.permission.SET_PROCESS_LIMIT"/>
<uses-permission android:name="android.permission.SET_TIME"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
<uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES"/>
<uses-permission android:name="android.permission.STATUS_BAR"/>
<uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ"/>
<uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_GSERVICES"/>
<uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS"/>
<uses-permission android:name="android.permission.WRITE_OWNER_DATA"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>

Posted by 컴투
커티(Qwerty) 자판이 달려있는 폰 개발을 하는 과정에서

Home key, EndCall Key, Back key, Sym key를 제한하게 되었다

1. key 이벤트를 사용하는 경우에는 아래의 메소드를 Override해서 사용해서 제한하면 되는데,
 Back key를 제한하기 위해서 사용하는 방법으로 onBackPressed()를 사용하거나 혹은
dispatchKeyEvent에서 사용을 제한하면 된다.

1).
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
    Log.d("ramses8", "dispatchKeyEvent");
    return super.dispatchKeyEvent(event);
}

2).
@Override
public void onBackPressed()
{

  super
.onBackPressed();

  Log.d(
"ramses8", "onBackPressed");
}
3).
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    Log.d("ramses8", "onKeyDown");
   
return super.onKeyDown(keyCode, event);
}

2. Home Key, Back Key의 경우에는

\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java

클래스 내에 아래의 Method부분에서 수정을 해주면 된다.

public boolean interceptKeyTi(WindowState win, int code, int metaKeys, boolean down,
            int repeatCount, int flags)

public int interceptKeyTq(RawInputEvent event, boolean screenIsOn)


3. 커티자판이 있는 폰의 Sym key 키를 제한하는 경우에는
frameworks\base\core\java\android\view\inputmethod\InputMethodManager.java

아래의 showInputMethodPicker(); 부분이 실행되지 않도록 막아준다.

그리고 dispatchKeyEvent(KeyEvent event)를 @Override해서 내용에 실행하고자 하는 이벤트를 넣어준다.

나의 경우에는 현재 실행되고 있는 Activity가 내가 keyEvent 제한을 줄려고 하는 Activity와 동일한지 비교하여
사용을 제한하였다...Activity비교 코드는 생략....

/**
     * @hide
     */
    public void dispatchKeyEvent(Context context, int seq, KeyEvent key,
            IInputMethodCallback callback) {
        synchronized (mH) {
            if (DEBUG) Log.d(TAG, "dispatchKeyEvent");
   
            if (mCurMethod == null) {
                try {
                    callback.finishedEvent(seq, false);
                } catch (RemoteException e) {
                }
                return;
            }
   
            if (key.getAction() == KeyEvent.ACTION_DOWN
                    && key.getKeyCode() == KeyEvent.KEYCODE_SYM) {
                showInputMethodPicker();
                try {
                    callback.finishedEvent(seq, true);
                } catch (RemoteException e) {
                }
                return;
            }
            try {
                if (DEBUG) Log.v(TAG, "DISPATCH KEY: " + mCurMethod);
                mCurMethod.dispatchKeyEvent(seq, key, callback);
            } catch (RemoteException e) {
                Log.w(TAG, "IME died: " + mCurId + " dropping: " + key, e);
                try {
                    callback.finishedEvent(seq, false);
                } catch (RemoteException ex) {
                }
            }
        }
Posted by 컴투
Unlocking Android에 나와 있는 코드를 이용하여 아래와 같이 만들어 사용하였다..
코드가 길지 않기 때문에 주석은 생략...

----- 변수 선언 ------
    private final String mPath = "/mnt/sdcard";    //SD카드 기본경로
    private final String mNewFolder = "test_folder";    //폴더이름
    private File mFile = null;
    private String mFilePath = null;
    private byte[] mTestFile = "1234".getBytes();
    private static String mFileName = System.currentTimeMillis() + ".txt";
----- 변수 선언 ------

1. 파일 생성
private boolean createFileFolder()
    {
        File fileDir = new File( mPath );
        try
        {
            if( fileDir.exists() && fileDir.canWrite() )
            {
                mFilePath = fileDir.getAbsolutePath() + "/" + mNewFolder;
                Log.e( "getAbsolutePath()", "getAbsolutePath() = "  + fileDir.getAbsolutePath() );
                File newFolder = new File( mFilePath );
                newFolder.mkdir();
                if( newFolder.exists() && newFolder.canWrite() )
                {
                    mFile = new File( newFolder.getAbsolutePath() + "/" + mFileName );
                    if( true == mFile.exists() )
                    {
                        mFile.delete();
                        if( DEBUG )
                            Log.d( LOG, "FILE EXIST" );
                    }
                    mFile.createNewFile();
                }
                else
                {
                    return false;
                }
            }
        }
        catch( Exception e )
        {
            return false;
        }
        return true;
    }
    
// 파일 쓰기
    private boolean writeFile()
    {
        byte[] fileContent = "1234".getBytes();
        FileOutputStream fos = null;
       
        try
        {
            fos = new FileOutputStream( mFile );
            fos.write( fileContent );
            fos.close();
            fos = null;
            mIsWrite = true;
            mSdWrite.setText( R.string.sd_write_ok );
            if( DEBUG )
                Log.d( LOG, "MEDIA_WROTE" );
        }
        catch( Exception e )
        {
            if( fos != null )
            {
                try
                {
                    fos.close();
                }
                catch( IOException e1 )
                {
                    e1.printStackTrace();
                }
                fos = null;
            }
            mIsWrite = false;
            mSdWrite.setText( R.string.sd_write_fail );
            e.printStackTrace();
            return false;
        }
        return true;
    }
    
// 파일 읽기
    private boolean readFile()
    {
        FileInputStream fis = null;
       
        try
        {
            fis = new FileInputStream( mFile );
            fis.read( mTestFile );
            fis.close();
            fis = null;
            mIsRead = true;
            mSdRead.setText( R.string.sd_read_ok );
            if( DEBUG )
                Log.d( LOG, "MEDIA_READ" );
           
            mFile.delete();
           
            if( DEBUG )
                Log.d( LOG, "MEDIA_DELETED" );
        }
        catch( Exception e )
        {
            if( fis != null )
            {
                try
                {
                    fis.close();
                }
                catch( IOException e1 )
                {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                fis = null;
            }
            mIsRead = true;
            mSdRead.setText( R.string.sd_read_fail );
           
            return false;
        }
        return true;
    }
Posted by 컴투

sdcard 파일 입출력

참조(공식 안드로이드 개발 사이트): http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

1. sdcard 에 접근하기 위해 manifest 파일에 permission 을 추가해 준다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. sdcard 가 마운트 되었는지 또는 쓰기 가능한지 등의 상태를 확인한다.
String state = Environment.getExternalStorageState()
 - state 가 Environment.MEDIA_MOUNTED 이면 마운트되어 있고 쓰기 가능하다.
 - state 가 MEDIA_MOUNTED_READ_ONLY 이면 마운트되어 있고 읽기만 가능하다.
 - 그외 는 sdcard 에 접근 할 수 없는 경우다.

3. . sdcard 의 File 객체를 받는다.
API level 7 까지는 Environment.getExternalStorageDirectory() 를 사용한다.
API level 8 부터는 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 를 사용할 수 있다.
예) File path = Environment.getExternalStorageDirectory();

4. File 객체를 만든다.
위에서 받은 File 객체를 path 로 넣어준다.
예) File file = new File(path, "filename");

5. 파일을 조작한다.
 - 바이너리 파일 입출력은 FileInputStream/FileOutputStream 클래스를 이용한다.
 - 텍스트 파일 입출력은 BufferedReader/BufferedWriter 클래스를 이용한다.

#) getExternalStorageDirectory 함수를 사용하지 않고 "/sdcard/filename" 등의 경로를 File 생성자에 직접 넣어주면 IllegalArgumentException (예 'File /sdcard/filename contains a path separator') 이 발생한다
Posted by 컴투
작업중에 Home Key와 종료 Key를 제한해야하는 일이 있어서
찾고 있는데 잘 보이지가 않는다. 예전에 L사에 파견갔을데 홈키사용을 제한시켰는데 어디였었는지 잊어버렸다 ㅠㅠ
어째든 다시 찾아보니

frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java

키와 관련된 내용이 들어있다 계속 찾아봐야지...

bionic

 

- BSD libc 개선 (bionic libc)

bootable

 

bootloader & disk installer

build

 

1. Android Build script & linker directive

    (core/prelink-linux-arm.map)

   - .so file 어떻게 구성하는지

   - android application 동작할 사용되는 각종 library(.so)들이 로딩되는

번지를 미리 지정한 파일 

   - 이유: shared library static library처럼 쓰기 위한 것 로딩속도를 빠르게 하기 위함       

    참고) dll start address 없다

            static으로 하면 빠르다.

   kissuu) android 이유없이 죽을때가 있음.

      --> map file 상의 size를 넘어갔을경우     

                        

  2. generic board 대한 configuration

    (1) build/target/board/generic/AndroidBoard.mk

    - root filesystem 구성을 어떻게 해야하는가?? 대한 directive 파일

    - android 최종 결과물 구성서 자동으로 포함하고 싶은 binary들에 대한 install등을 결정

    - custom init.rc 혹은 init.%hardware%.rc 파일들의 install

 

    (2) build/target/board/generic/BoardConfig.mk

    - Android의 Makefile에 기본적으로 포함되는 최상위 Makefile

    - 주로 HAL enable/disable 관련이 깊음

    - Android.mk 파일에 영향을 주고 Android.mk 파일에서 define 제어할 있도록 설정하는 파일

   (ex> 

    ▪ BoardConfig.mk 의 BOARD_USES_GENERIC_AUDIO := true

    ▪ frameworks/base/libs/audioflinger/Android.mk 

            ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

              LOCAL_CFLAGS += -DGENERIC_AUDIO

            endif

    ▪ frameworks/base/libs/audioflinger/AudioHardwareInterface.cpp

            #ifdef GENERIC_AUDIO

                hw = new AudioHardwareGeneric();

            #else

cts

 

   - Compatability Test Suite 약자

  Android platform development kit JAVA 호환성 테스트

dalvik

 

   - dalvik vm source

development

 

- 개발시 필요한 utility & app

external

 

- Android 고유 library 아닌 linux혹은 기존에 작성된 라이브러리/binary들의 소스를 넣어놓은 디렉토리

- 여기서 작성된 library shared library(.so) binary들은 모두 system/lib, system/bin 각각 install

- framework test app/lib 여기에 작업

frameworks

 

 /policies

- PhoneWindowManager 소스가 들어있음

- Android 전체 시스템을 background에서 제어하는 최상위 application인 PhoneWindowManager

- PhoneWindowManager KeyGuard관련 화면 전체 제어(ex> rotation) event관리

(ex> home key관련)

    /base

- Android Framework source

/libs: Android base library(C++서부터)

   /audioflinger   : Android audio service & HAL source

   /surfaceflinger : Android video service & HAL

   /ui            

    Application Framework에서 JNI를 통해서 호출되는 Android framework client  part

    HAL(Input device 경우)  - EventHub.cpp

   /utils

    wrapping class, 압축관련 유틸리티등...

   /binder 

    Android Binder & Anonymous shared memory

/cmds

   binder관련인 service manager소스와 여러가지 command

/media

   media관련 client & service library

 

hardware

 

 HAL source & include

 일반적으로 android에서 사용하는 hardware관련 소스들을 포함

 반드시 디렉토리에만 위치하는 것은 아니다

 (vendor 디렉토리에 존재하는 경우도 많음)

 

   - libhardware

   board hardware dependcy 높은 하드웨어 모듈 들

   일반적으로 안드로이드 폰에 탑재가 되지 않고, cpu 혹은

   제조사의 모듈에 dependent 한 부분들

   안드로이드 소스를 이용해서 컴파일 하지 않는 경우가 많고

   모듈단위로 직접 컴파일 해서 안드로이드 root fs

   install하는 경우가 많다.

   

   - libhardware_legacy

   일반적으로 안드로이드 폰에 거의 반드시 있어야 하는

   hardware 모듈, 안드로이드 컴파일시 같이 컴파일 된다.

   - wifi/wifi.c

 

out

 

android compile 결과물 디렉토리

packages

 

  android 기본 application source

  주의해야할 점은 모든 app가 컴파일 되지는 않는다.

  모든 app 컴파일 되기 위해서는

  board관련 디렉토리의 Android 기본 board mk 파일을

  수정해야한다.

  ex> build/target/product/generic.mk

                           generic_with_google.mk

                          

 vi ntc100.mk

 =========================================================

 $(call inherit-product, build/target/product/generic.mk)

 PRODUCT_MANUFACTURER := aesop

 PRODUCT_NAME := ntc100

 PRODUCT_DEVICE := ntc100

 PRODUCT_BOARD := ntc100

 =========================================================

prebuilt

 

toolchain & 필요한 binary

system (read-only)

 

android 기본 binary 소스(ex> init)

 /core/init :  android init source

 /core/vold :  external storage 제어 모듈 

     Android 2.1까지

     vold.conf 파일 참조

 /vold      : vold2, android 2.2서부터 사용    

         vold.fstab

vendor

vendor specific code

  ex> HAL

  ex> product list관리

 

출처 : http://kissuu.egloos.com/3859448

Posted by 컴투