2013년 12월 14일 토요일

[ios] AVAudioSessions이 active상태인지 확인..


아래처럼 썻었으나.. ios7.0부터 deprecated되버렸다..
7.x버전 이상에서 값이 넘어오지 않음.

UInt32 otherAudioIsPlaying = 0;
UInt32 propertySize = sizeof (otherAudioIsPlaying);
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &otherAudioIsPlaying);

if(kAudioSessionNoError == status)
{
    NSLog(@"%u", (unsigned int)otherAudioIsPlaying);

}


ios 6.0이상부터 아래처럼 사용가능 함.

BOOL bOtherPlaying = [[AVAudioSession sharedInstance] isOtherAudioPlaying];

android.mk의 LOCAL_SRC_FILES에 wildcard 사용하기.

android.mk에서 LOCAL_SRC_FILES에 일일이 소스 파일을 적어 넣기 귀찮을 수 있다.
와일드 카드가 적용 가능하다는거..


android.mk파일안에 아래와 같이 ppp패스안에  5개의 파일이 들어가 있고
그 5개의 파일을 모드 컴파일 하려 한다면. 아래와 같이 할 것임..

LOCAL_SRC_FILES := $(LOCAL_PATH)/ppp/a1.c \
$(LOCAL_PATH)/ppp/a2.c \
$(LOCAL_PATH)/ppp/a3.c \
$(LOCAL_PATH)/ppp/a4.c \
$(LOCAL_PATH)/ppp/a5.c

아래와 같이 와일드 카드로 바꿔 처리할 수 있다.

PPP_C_FILE_LIST := $(wildcard $(LOCAL_PATH)/ppp/*.c)
LOCAL_SRC_FILES := $(PPP_C_FILE_LIST:$(LOCAL_PATH)/%=%) 

직접 만든 소스라면 사용할일이 별로 없을듯 하지만. 대량(?)으로 가져다 붙이는 경우라면
나름 편할지도..

android Accessing Private Methods

안드로이드의 Private메소드에 접근하는 방법..

package package1;


public class ABC {
    
ABC(){
        System.out.println("constructor");
    }
}



위 같은 코드가 있을때 아래와 같이 접근 가능하단다..


Class<?> c = Class.forName("package1.ABC");//full package name

Constructor<?> constructor = c.getDeclaredConstructor();
constructor.setAccessible(true);
Object o = constructor.newInstance(null);


내부클래스를 생성할 경우는.. 이렇게 접근하면 된단다.
Class<?> clazz = Class.forName("package1.Outer$Inner");



Private Method에 접근하는 방법도 있다.
아래와 같은 클래스가 있는데....

public class ABC {

  private String string = null;

  public ABC(String string) {
    this.string = string;
  }

  private String getString(){
    return this.string;
  }
}


getString함수에 접근해서 실행하고자 한다면~~
아래를 참고하자~

ABC abc = new ABC("The Private Value");

Method abcMethod = ABC.class.getDeclaredMethod("getString", null);

abcMethod.setAccessible(true);

String value = (String)abcMethod.invoke(abc, null);
    
System.out.println("value = " + value);





Screen Dim WakeLock Deprecated as of API 17

기본 코드..
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getPackageName());



대신, 아래처럼..
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

C++컴파일 경우 -Wreorder 의미

컴파일 옵션을 -Wall하면 간혹 나타나는 오류임.
생성자의 초기화 순서는 헤더에서 선언된 순서와 일치하여야 한다는 의미임.
생성자에서 초기화 할때 상수가 아닌 변수로 초기화를 해버리면 그 순서때문에
초기값이 꼬일 수 있다는 거임..

struct A {
    int i;    int j;
    A(): j (0), i (1) // here
    {
    }
};

ffmpeg의 C헤더를 C++헤더에 include할때...

1. C++ 헤더에 아래와 같이 extern 구문을 넣어줍니다.


extern "C" {
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}
 

#include <libavutil/imgutils.h>

2. 컴파일 옵션의 CXXFLAGS에 -D__STDC_CONSTANT_MACROS 옵션을 추가합니다.