6월, 2016의 게시물 표시

Android N: Quick Settings Tile API

이미지
Android N이 새로이 제공하는 Quick Settings Tile API 를 이용하여 Quick Settings 영역에 어플의 tile을 추가할 수 있습니다.  아래 화면을 보면 Test tile이 추가되어 있죠. 새로운 Tile을 추가하기 위해서는 TileService 클래스를 구현한 서비스를 구현해 주어야 합니다. import android.service.quicksettings.TileService; public class MyTileService extends TileService { ... } 사용자가 해당 tile을 선택 시 동작을 구현하기 위해서는 아래와 같이 TileService method를 구현합니다. public class MyTileService extends TileService {    @Override    public void onTileAdded() {       Log. d ( LOG_TAG , "onTileAdded" );   }    @Override    public void onTileRemoved() {       Log. d ( LOG_TAG , "onTileRemoved" );   }    @Override    public void onClick() {       Log. d ( LOG_TAG , "onClick state = " +           Integer. toString (getQsTile()....

[Android N] Background Optimizations - CONNECTIVITY_ACTION

CONNECTIVITY_ACTION 브로드캐스트는 네트워크 연결 상태 변화를 알려줍니다. LTE 모바일 네트워크에서 Wi-Fi로 변경되는 경우 등이죠. Android 6.0까지는 애플리케이션의 manifest 파일에  CONNECTIVITY_ACTION 브로드캐스트를 등록할 수 있었지만 N 부터는 허용하지 않습니다.  왜 그럴까요?  네트워크 연결 상태가 변할 때 마다  CONNECTIVITY_ACTION을 받기 위해 등록된 앱들이 실행되면 메모리, 배터리 등의 자원을 낭비하게 되겠죠. 막상 실행된 앱이 할일도 없는데 말이죠. 대신 Android N의 경우 아래 3가지 방법을 이용하여 네트워크 상태 변화를 확인할 수 있습니다. Context.registerReceiver()로 CONNECTIVITY_ACTION 브로드캐스트를 받도록 등록할 수 있습니다 JobScheduler를 이용하여 특정 조건이 되면 JobService의 onStartJob()이 호출 되도록 합니다 ConnectivityManager를 이용하여 특정 조건의 네트워크 상태가 되면 콜백이 불리도록 합니다 각 방법에 대한 예제 코드를 보죠. getApplicationContext().registerReceiver( new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { Log. d ( LOG_TAG , "onReceive" ); } }, new IntentFilter(android.net.ConnectivityManager. CONNECTIVITY_ACTION )); registerReceiver 를 호출하여 CONNECTIVITY_ACTION 브로드캐스트를 받도록 합니다. 네트워크의 상태가 변할 때 마다 onReceive가 호출됩니다. (예: LTE =...