Android/App개발2010. 4. 19. 16:39
볼륨키로 조절시 어떤때는 ringer볼륨, 어떤때는 music볼륨등 다르게 조절되는것을 볼수있다.
이 때 이값은 어떻게 결정될까?

AudioService의 getActiveStreamType(int suggestedStreamType)함수에 의해 요구한 볼륨조절값을 참조하여 현재 시스템의 상태에 따른 볼륨조절 믹서 종류를 구분하여 준다.

    private int getActiveStreamType(int suggestedStreamType) {
        boolean isOffhook = false;
        try {
            ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
            if (phone != null) isOffhook = phone.isOffhook();
        } catch (RemoteException e) {
            Log.w(TAG, "Couldn't connect to phone service", e);
        }

        if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION) == AudioSystem.FORCE_BT_SCO) {
            // Log.v(TAG, "getActiveStreamType: Forcing STREAM_BLUETOOTH_SCO...");
            return AudioSystem.STREAM_BLUETOOTH_SCO;
        } else if (isOffhook) {
            // Log.v(TAG, "getActiveStreamType: Forcing STREAM_VOICE_CALL...");
            return AudioSystem.STREAM_VOICE_CALL;
        } else if (AudioSystem.isMusicActive()) {
            // Log.v(TAG, "getActiveStreamType: Forcing STREAM_MUSIC...");
            return AudioSystem.STREAM_MUSIC;
        } else if (suggestedStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) {
            // Log.v(TAG, "getActiveStreamType: Forcing STREAM_RING...");
            return AudioSystem.STREAM_RING;
        } else {
            // Log.v(TAG, "getActiveStreamType: Returning suggested type " + suggestedStreamType);
            return suggestedStreamType;
        }
    }

함수의 구현내용을 살펴보면...
BT사용중이면 BT볼륨  -> Call중이면 VoiceCall볼륨 -> 음악재생중이면 Music 볼륨 -> 디폴트는 Ringer볼륨 의 순서로 결정된다.




Posted by 삼스
흥미있는 뉴스2010. 4. 19. 15:43
회색님의 블로터의 글을 읽고 난 후 평소 내 생각과 일치함을 알게 되었다.
스마트폰 앱을 개발하여 몇천만원씩 벌게 되었다는 여느 개발자들의 얘기를 듣게 되고 여기저기서 이거 돈된다는 소릴듣고 진짜 될거라고 믿고 모든걸 내걸고 뛰어드는 개발자가 있을까바 참 걱정이다.
이미 레드오션이 되어버린 앱스토어는 진짜 거대한 기업들만이 살아남게 될것이다.
몇몇 살아남는 자는 거대기업이 사냥하지 않는 마니아층을 위한 앱들을 만드는 자들 정도가 되지 않을까???
대체 어떻게 미래를 맞이해야 하는걸까??? 생각해보게하는 글이다...
Posted by 삼스
Android/App개발2010. 4. 19. 11:51
emulator에서는 phone과 notificatin ringtone이 하나도 뜨지 않아서 테스트를 할수가 없다.
이 때 Sdcard와 db파일을 일부조정하면 테스트가 가능하다.

1. emulator실행
2. DDMS에서 file explorer에서 scard폴더에 추가하고자 하는 ringtone파일들(여기서는 ogg파일들을 사용함)을 집어넣는다.
3. /data/data/com.android.providers.media/databases/external-xxxx.db파일을 꺼내온다.
4. 꺼낸 external-xxxx.db파일을 sqlitespy프로그램으로 아래 그림과 같이 audio_meta테이블에서 is_ringtone과 is_notification값을 1로 변경한다. is_alarm을 1로 하면 알람톤으로도 사용이 가능할것이다.
5. 변경한 external-xxxx.db파일을 emulator에 다시 집어 넣는다.
6. emulator를 다시 시작한다.


위의 순서로 하면 아래와 같이 링톤이 뜨게 된다.




Posted by 삼스