레이블이 #안드로이드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #안드로이드인 게시물을 표시합니다. 모든 게시물 표시

2019년 3월 25일 월요일

[android] SharedPreferences 사용하기

Android  SharedPreferences 사용하기


import android.content.SharedPreferences;

private static SharedPreferences mSharedPref;
private static SharedPreferences.Editor mEditor;

private static final String PREF_PDCUI = "PdcUIPrefs" ;

Override
    protected void onCreate(Bundle savedInstanceState) {
        mSharedPref = getSharedPreferences(PREF_PDCUI, Context.MODE_PRIVATE);
        if ( mSharedPref != null )
            mEditor = mSharedPref.edit();
    }

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

1. Write Data to Preferneces
mEditor.putInt(PREF_OPSWIDGET, ((arg1==true)?1:0));
mEditor.commit();

2. Read Data from Preferences
mOpsWidgetShow = mSharedPref.getBoolean(PREF_OPSWIDGET, true);

[android] 안드로이드 인터페이스 정의 언어 (AIDL)

안드로이드 인터페이스 정의 언어 (AIDL)

- https://developer.android.com/guide/components/aidl.html?hl=ko#Calling
- https://android-kr.tistory.com/m/284

[android] Native RTL support in Android 4.2

[android] Native RTL support in Android 4.2


1. add android:supportsRtl="true" to the <application> element in your manifest file.
2. Change all of your app's "left/right" layout properties to new "start/end" equivalents.

- https://android-developers.googleblog.com/2013/03/native-rtl-support-in-android-42.html

[android] signing key 적용 APK Release하기 (link)

signing key 적용 APK Release하기

- https://appsnuri.tistory.com/20

[android] How to disable Lock Screen via property system

Android   Disable Lock Screen via property system


add below line at init.rc or build.prop
# Set LockScreen Disable
    setprop ro.lockscreen.disable.default true

[android] How to get Default Launcher Package Name

Android  How to get Default Launcher Package Name


import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.pm.PackageManager;

private String getHomeScreenAppName() {
String homePkgName;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

homePkgName = resolveInfo.activityInfo.packageName;
//Toast.makeText(this.getApplicationContext(), currentHomePackage, Toast.LENGTH_LONG).show();
Log.d(TAG, "Home Screen Package : " + homePkgName);

return homePkgName;
}

[android] Audio System 관련 링크

Android Audio System


Linux Sound Device와 안드로이드 사운드 시스템
- https://www.oss.kr/info_techtip/show/d6d8e645-5a73-43b1-8c4b-4acf38f79553

ASoc Codec Class driver
- https://www.kernel.org/doc/html/v4.14/sound/soc/codec.html

오디오 용어정리
- http://www.audiojournal.co.kr/lecture/aud_15_1.php

[android] Telephony Framework (link)

Android Telephony Framework 개요
- https://victor8481.tistory.com/m/262

[android] 디자인패턴 (link)

Android 디자인패턴
- https://tosslab.github.io/android/2015/03/01/01.Android-mvc-mvvm-mvp.html

Android MVP 무작정 따라하기
- https://thdev.tech/androiddev/2017/02/20/Android-MVP-Package-Structure/

[android] Binder 소개 (link)

Android Binder 소개
- http://www.flowdas.com/introduction-to-android-binder/

[ Android] Wakelock을 이용한 Back Light AlwaysOn


Back Light AlwaysOn via Wakelock

import android.os.PowerManager;

private PowerManager mPM;
private PowerManager.WakeLock mAlwyasOnWakeLock;

    mPM = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    mAlwyasOnWakeLock = mPM.newWakeLock(PowerManager.FULL_WAKE_LOCK, "AlwaysOn_BL");
    mAlwyasOnWakeLock.acquire();

[Android] KeyEvent.KEYCODE_NOTIFICATION 을 Application으로 전달하지 않기

 #Android   KeyEvent.KEYCODE_NOTIFICATION 을 Application으로 전달하지 않기

1. 특정 KeyCode에 대해 POLICY_FLAG_PASS_TO_USER  flag 제거

1.1 Flag 정의
path : frameworks/native/include/input/input.h
    // Indicates that the event should be dispatched to applications.
    // The input event should still be sent to the InputDispatcher so that it can see all
    // input events received include those that it will not deliver.
    POLICY_FLAG_PASS_TO_USER = 0x40000000,


1.2 수정사항
path : rk3066/frameworks/base/services/jni/com_android_server_input_InputManagerService.cpp
void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags) {
    ......
        handleInterceptActions(wmActions, when, /byref/ policyFlags);
    ......
    if (keyEvent->getKeyCode() == /KeyEvent.KEYCODE_NOTIFICATION/83 )
        policyFlags &= ~POLICY_FLAG_PASS_TO_USER;
}

void NativeInputManager::handleInterceptActions(jint wmActions, nsecs_t when,
        uint32_t& policyFlags) {
    if (wmActions & WM_ACTION_GO_TO_SLEEP) {
#if DEBUG_INPUT_DISPATCHER_POLICY
        ALOGD("handleInterceptActions: Going to sleep.");
#endif
        android_server_PowerManagerService_goToSleep(when);
    }

    if (wmActions & WM_ACTION_WAKE_UP) {
#if DEBUG_INPUT_DISPATCHER_POLICY
        ALOGD("handleInterceptActions: Waking up.");
#endif
        android_server_PowerManagerService_wakeUp(when);
    }

    if (wmActions & WM_ACTION_PASS_TO_USER) {
        policyFlags |= POLICY_FLAG_PASS_TO_USER;
    } else {
#if DEBUG_INPUT_DISPATCHER_POLICY
        ALOGD("handleInterceptActions: Not passing key to user.");
#endif
    }
}

2. Error case
- 현상 : KeyEvent 제거 -> Wakeup 불가.

path : rk3066/frameworks/base/core/jni/android_view_KeyEvent.cpp
jobject android_view_KeyEvent_fromNative(JNIEnv* env, const KeyEvent* event) {
    if ( event->getKeyCode() == XXX )
        return NULL;
}

[Android] seekbar control sample

android seekbar control
- https://mindfiremobile.wordpress.com/2014/05/20/seekbar-customization-for-android-development/

[Android] Switch widget control

android   Switch widget control sample


import android.widget.Switch;

private Switch mySwitch;

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  mySwitch = (Switch) findViewById(R.id.mySwitch);

  //set the switch to ON
  mySwitch.setChecked(true);
  //attach a listener to check for changes in state
  mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {

   @Override
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {

    if(isChecked){
      // switch on
    }else{
      // switch off
    }
   }
  });
 }

[Android] App widget 만들기

Android App widget 만들기
- https://arabiannight.tistory.com/m/239

[Android] system 시간 관련 함수

android   system 시간 관련 함수.

System.currentTimeMillis()
The wall clock can be set by the user or the phone
 *     network (see {@link#setCurrentTimeMillis}), so the time may jump
 *     backwards or forwards unpredictably.  This clock should only be used
 *     when correspondence with real-world dates and times is important, such
 *     as in a calendar or alarm clock application.
 *     {@link android.content.Intent#ACTION_TIME_TICK ACTION_TIME_TICK},
 *     {@link android.content.Intent#ACTION_TIME_CHANGED ACTION_TIME_CHANGED}
 *     and {@link android.content.Intent#ACTION_TIMEZONE_CHANGED
 *     ACTION_TIMEZONE_CHANGED} {@link android.content.Intent Intent}
 *     broadcasts to find out when the time changes.
 *

System.uptimeMillis()
counted in milliseconds since the
 *     system was booted.  This clock stops when the system enters deep
 *     sleep (CPU off, display dark, device waiting for external input),
 *     but is not affected by clock scaling, idle, or other power saving
 *     mechanisms.

System.elapsedRealtime() / System.elapsedRealtimeNanos()
 *     <li> <p> {@link#elapsedRealtime} and {@link#elapsedRealtimeNanos}
 *     return the time since the system was booted, and include deep sleep.
 *     This clock is guaranteed to be monotonic, and continues to tick even
 *     when the CPU is in power saving modes, so is the recommend basis
 *     for general purpose interval timing.

[Android] NDK standalone toolchain을 생성하기

#android #ndk #standalon #toolchain

Android 7.x 기준으로 NDK standalone toolchain을 생성하는 방법을 정리한다.

1. Android NDK 다운로드 후 압축
 : 문서를 작성중인 현재 stable 버전은 r16b이다.
- https://developer.android.com/ndk/downloads/

2. standalone toolchain 생성
$ cd android-ndk
$ make-standalone-toolchain.sh --verbose --toolchain=arm-linux-androideabi-4.9  --package-dir=/home/sisbsoma/toolchain --platform=android-26 --arch=arm

HOST_OS=linux
HOST_EXE=
HOST_ARCH=x86_64
HOST_TAG=linux-x86_64
HOST_NUM_CPUS=8
BUILD_NUM_CPUS=16
## COMMAND: python /opt/android-sdk/ndk-bundle/build/tools/make_standalone_toolchain.py --arch arm --api 26 --stl gnustl --package-dir=/home/sisbsoma/toolchain

정상적으로 생성된 경우 아래와 같은 로그가 출력된다.
Package installed to /home/sisbsoma/toolchain.

생성된 이미지는 tar.bz2 형태로 압축되어 있다.
$ cd /home/sisbsoma/toolchain && ls
arm-linux-androideabi.tar.bz2

-----------------------------------------------------------------------------------------------------------------------
ex) FFTW-3.3.3 을 standalone toolchain 을 사용하여 컴파일 하는 방법

configure -> make -> make install

$ ./configure CC=$HOME/ndk-toolchain-gingerbread/bin/arm-linux-androideabi-gcc CXX=$HOME/ndk-toolchain-gingerbread/bin/arm-linux-androideabi-g++ CPPFLAGS=-I$HOME/ndk-toolchain-gingerbread/include LDFLAGS="-Wl,-rpath-link=$HOME/ndk-toolchain/lib -L$HOME/ndk-toolchain-gingerbread/lib" --host=arm-eabi --disable-fortran --prefix=$HOME/Downloads/fftw-3.3.3/lib-out
$make
$make install

-ref : https://plus.google.com/109848742745880085168/posts/QHawrqbfMFA

[rockchip] Rockchip Batch Tool V1.5 실행오류 관련 정리

rockchip Binary Download Tool 설정

1. 현상
- Rockchip Batch Tool V1.5.exe 실행시 장치 인식 안됨

2. 수정사항
- config.ini 수정
- SUPPORTLOWUSB=TRUE 추가

#选择工具语言:Selected=1(中文);Selected=2(英文)
[Language]
Kinds=2
Selected=2
LangPath=Language\

Lang1File=Chinese.ini
Lang1FontName=宋体
Lang1FontSize=9
Lang1Tag=CHN
Lang1CHNTitle=中文
Lang1ENGTitle=English

Lang2File=English.ini
Lang2FontName=Arial
Lang2FontSize=9
Lang2Tag=ENG
Lang2CHNTitle=英文
Lang2ENGTitle=English

[System]
#下面是设备rockusb设备和msc设备的vendor id和product id,一般情况下这些ID不用设置可以使用默#认的,由于msc设备的VID和PID是可以修改定制的,设置例子如下:
#MSC_VID=0x0BB4,MSC_PID=0x0C01
RKUSB_VID=2207
RKUSB_PID=300A
MSC_VID=
MSC_PID=

FORCEFLAG=FALSE
#设置用户盘操作,
#FORMATFLAG=TRUE时,在升级后会对用户盘格式化,磁盘卷标可以通过设置DISKVOLUME项来指定
FORMATFLAG=
DISKVOLUME=USER_DISK
#COPYFLAG=TRUE时,在升级后会将DEFAULT_COPYPATH指定的目录或者文件拷贝到用户盘根目录
COPYFLAG=
DEFAULT_COPYPATH=

FORMATDATADISKFLAG=
DATADISKVOLUME=DATA_DISK
COPYDATADISKFLAG=
DEFAULT_DATADISK_COPYPATH=

LOGFLAG=TRUE
#SUPPORTLOWUSB=TRUE时,扫描支持full speed usb设备,默认只支持high speed usb设备
SUPPORTLOWUSB=TRUE

#通过设置CHECK_MACHINE_MODEL项,可以在升级前校验固件是否允许升级,允许的条件是设备中的值要跟#固件中parameter文件里MACHINE_MODEL的值匹配
CHECK_MACHINE_MODEL=

#QUICK_CHECK_MODE=TRUE时,开启快速校验模式,可以提高校验速度,但是也存在一些校验不完全的风险
QUICK_CHECK_MODE=

#通过设置DEFAULT_FIRMWARE项,等于默认加载固件的路径,可以在程序启动时自动打开此位置的固件
DEFAULT_FIRMWARE=


UID_STRING=ROCKCHIP
FW_VERSION_MODE=

#Android固件,可以通过指定MISC_MODIFY_MODE为WIPE_DATA和WIPE_ALL来修改misc分区数据,#WIPE_DATA时不擦除用户空间数据,WIPE_ALL则全部擦除
MISC_MODIFY_MODE=

MSC_WAITTIME=30
RKUSB_WAITTIME=30

Android 스튜디오 App 만들기 강좌

Android 스튜디오 Applicaion 만들기 강좌
- https://www.inflearn.com/course/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0/

[Android] FCM Client application 설정

Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정
- https://firebase.google.com/docs/cloud-messaging/android/client?hl=ko