안드로이드 스마트폰에서 화면이 켜지는 경우는 크게 두가지로 나뉜다. 1. HW Key에 의해 화면이 켜짐2. Software에 의해 화면이 켜짐 여기서 1. 하드웨어 키에 의해 화면이 켜지는 경우는 홈 버튼(Home button) / 파워 버튼(Power Button)으로 화면을 켜는 경우이며, 2. Software에 의해 켜지는 경우는 알람, 푸쉬메세지, 전화 등 여러 'Notification'이 들어 왔을 경우에 해당한다. 나는 이 중에 1번의 경우를 캐치하고 싶었다. 2번은 철저하게 배제하고.사용한 방법은 아래와 같다. 1) NotificationListenerService를 생성 후, Notifacation을 받을 경우 현재 시간을 SharedPreference에 저장한다.2) BroadcastR..
http://www.learn2crack.com/2014/11/reading-notification-using-notificationlistenerservice.html 완벽하다 정말 NotificationListnerService 외에도 LocalBroadcastManager 사용법 까지 알게 되어 좋다. 참고로 Notification Access는 폰마다 위치가 다르다.아래와 같이 열어주면 편하다. Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); startActivity(intent); 추가적으로 NotificationListenerService를 통해 핸드폰 화면이 꺼져있을 때 메세지가 와서 해..
안드로이드 서비스 동작 중인지 파악하기 아래의 코드를 사용하면 된다. 나는 보통 static으로 선언하여 service 안에 넣는다. 예를 들어 service 이름이 'JHService' 라면JHService.isServiceRunning(); 하면 여부가 나온다. public static boolean isServiceRunning(Context context) { ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo rsi : am.getRunningServices(Integer.MAX_VALUE)) { if ([서비스이름].class.getName()..
루팅된 폰에서만 가능 확실한 정보는 아니고, 대충 느끼기에.. 안드로이드 부팅 중 /system/app 또는 /system/priv-app 에 있는 apk들의 압축을 /data/data에 푸는듯 보인다. 즉, /system 안에 있는 애들을 지워주면 될 것 같은데.. 이 안에 있는 것을 지우려고 하면 mount가 read-only 로 돼있어서 지워지질 않는다. 따라서, 마운트를 바꿔준 후, 앱을 지우도록 하자 #su #mount -o rw,remount /system #cd /system/priv-app #rm -rf [App Name] 이후 재부팅 해서 /data/data 안을 보면 [AppName] 이 없는 것을 확인 할 수 있다. /system 안에서 찾을 수 없으니 부팅 중에 가져오지 않은 것이다..
CPU (Central Processing Unit) CPU가 무엇인가... 하면.. 컴퓨터의 두뇌같은 녀석이다. CPU가 들어가면 그놈은 컴퓨터라고 할 수 있으며, 컴퓨터라고 하면 거기엔 CPU가 있다고 볼 수 있다. 두뇌이기 때문에 CPU라고 하면 한 컴퓨터 시스템에 1개가 있다.(Central Unit 입니다~!) 보통 검정색 Chip 으로 돼있다. 예전에는 단순히 제어 장치, 연산 장치, 레지스터.. 정도가 다였지만, 요즘은 공정 기술이 좋아지면서 이것저것 마구마구 들어간다. PC용 CPU를 보면 내장 그래픽 카드도 들어가고 장난 아니다. SoC (System On Chip)이라 그래서 요즘은 엄지손톱 만한 자그만 칩에 이것저것 다 들어간다. Processor + System Bus + Perip..
학교에서 Computer Architeture 수업을 듣는데.. MIPS Architecture로 수업을 했다. (ARM이었으면 더 좋았을텐데..) 참 웃긴게, 나는 수업 듣는 내내 뭔 내용인지 이해를 하지 못했었다.. Booth 알고리즘은 뭐고.. ALU는 뭐고.. 무엇보다 내가 왜 저런걸 해야하는건지?? 그냥 XML에 레이아웃 쫙~ 그려서 JAVA로 안드로이드 뙇! 하면 프로그램 하나가 만들어 질텐데.. 재미도 없고 지루하기만 하고.. 나는 좀 '동기'가 있어야 움직이는 사람인데.. 학교 수업 당시에는 그러한 '동기'가 없었다. 고로 나는 움직이지 않았고.. 수업을 열심히 듣지 않았다. 시간은 흘러.. 현업에서 Firmware를 주업으로 하게 되면서, 하드웨어 flow를 이해하는 것이 얼마나 중요한 ..
Java로 로그를 찍을 땐 Log.i / Log.d ... 등을 이용하여 로그를 출력한다. JNI에서도 이를 지원한다. 에 있는 __android_log_print를 이용하면 되는데, 이걸 그대로 사용하면 너무 길기에 보통 아래와 같이 정의해 놓고 사용한다.#include #define LOG_TAG "tagname" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , L..
자바와 C/C++은 내부적으로 배열을 이용하는 구조가 다르다. C/C++은 배열이 메모리 상에서 연속적으로 배치되는데 비해, Java의 경우 반드시 연속적으로 배치돼 있지는 않다. 이런 저런 연유로, Java와 C/C++의 배열은 서로 다르기 때문에, C/C++에서 자바의 배열을 사용하려면 반드시 변환을 해야 한다. C/C++에서 접근 할 수 있는 자바의 배열을 가져오려면 Get[Type]ArrayElement를 사용하며, C/C++에서 자바의 배열에 접근 할 수 있는 배열의 포인터를 반환한다. 중요한 것은, 위의 함수를 이용해 확보한 메모리 영역은, 사용 후 반드시 Release[Type]ArrayElements 함수를 이용해 해제해야 한다는 것이다. // 새로운 int[10] 배열 생성 jintArr..
- Total
- Today
- Yesterday
- android
- jni
- jni강좌
- Quiz
- C++
- algorithm
- 안드로이드
- MFC
- gcc
- 프로그래밍
- it
- C
- NDK
- Visual C++
- 리눅스
- database
- Cloud
- Troubleshooting
- AWS
- Python
- 드라이버
- linux
- java
- winapi
- source
- db
- kering
- API
- 음악
- driver
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |