1. 커맨드창을 오픈한다.

2. 다시 cmd /u 입력
3. chcp 65001
4. 콘솔창의 속성에서 폰트,를 Lucida Console 로 변경해준다.
5. adb logcat


콘솔창에서 한글이 출력되는 것을 확인 할 수 있다.

 


 
 
 
 

- 안드로이드 어플리케이션에서 배터리 상태를 체크하기 위한 방법 -

 

BatteryManager class 사용하여 구현

(developer site link)

http://developer.android.com/reference/android/os/BatteryManager.html

 

방법은 구현하고자 하는 app. 에 BroadcastReceiver 를 추가하여, 'ACTION_BATTERY_CHANGED' 가 올때, 필요한 값들을 체크하여 사용하면 된다.

(ACTION_BATTERY_CHANGED 관련 developer site link)

http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED

 

아래 샘플코드에서는 연결상태, 배터리상태, 배터리레벨 에 대해서 확인이 가능하도록 만들었다.

로그상 값만을 간단히 확인 가능하도록 만들었으며, 확장을 위해 context 등 불필요 코드가 몇가지 있으나, 실행에는 무관하다.

 

// 추가 : BroadcastReceiver 의 용법에 대해 주의해서 봐둔다.

 

UI 는 없으며, 아래 같이 로그에서만 확인이 가능함을 밝힌다.

 

 

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

 

 

 

Colorized version of the entered code

package com.BatteryChecker;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

public class BatteryCheckMain extends Activity
{
 private static final String tag = "BatteryChecker";
 private static final String filetag = "<BatteryCheckMain> / ";
 
 private Context context;
 private BroadcastReceiver mBatteryBroadcastReceiver;
 
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  
  context = this;
  
  initBroadcastReceiver(context);
  registerBatteryReceiver(context);
  
  Log.i(tag, filetag + "PLUGED:" + BatteryManager.EXTRA_PLUGGED + "/LEVEL:" + BatteryManager.EXTRA_LEVEL
    + "/STATUS:" + BatteryManager.EXTRA_STATUS);
  
  setContentView(R.layout.main);
 }
 

 @Override
 protected void onDestroy()
 {
  // TODO Auto-generated method stub
  super.onDestroy();
  Log.i(tag, filetag + "onDeatroy()");
  unregisterReceiver(mBatteryBroadcastReceiver);
 }


 @Override
 protected void onPause()
 {
  // TODO Auto-generated method stub
  super.onPause();
 }


 @Override
 protected void onResume()
 {
  // TODO Auto-generated method stub
  super.onResume();
 }





 
 // LOCAL FUNCTION -----------------------------------------------------------------------------
 
 
 // make battery broadcast receiver
 boolean initBroadcastReceiver(Context context)
 {
  mBatteryBroadcastReceiver = new BroadcastReceiver()
  {

   @Override
   public void onReceive(Context context, Intent intent)
   {
    
    final String action = intent.getAction();
    
    Log.i(tag, filetag + "mBatteryBroadcastReceiver - onReceive()/action:" +action);
    
    if(Intent.ACTION_BATTERY_CHANGED.equals(action))
    {
     Log.i(tag, filetag + "PLUG:" + intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)
       + " / STATUS:" + intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN)
       + " / LEVEL:" + intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0));
    }
   }

   @Override
   public IBinder peekService(Context myContext, Intent service)
   {
    // TODO Auto-generated method stub
    return super.peekService(myContext, service);
   }
   
  };
  return true;
 } //initBroadcastReceiver
 
 boolean registerBatteryReceiver(Context context)
 {
  Log.i(tag, filetag + "registerBatteryReceiver()");
  
  IntentFilter filter = new IntentFilter();
  filter.addAction(Intent.ACTION_BATTERY_CHANGED);
  filter.addAction(Intent.ACTION_BATTERY_LOW);
  registerReceiver(mBatteryBroadcastReceiver, filter);
  return true;
 }
}


 

 

구글 크롬 쓰시는 분들 안드로이드 SDK’ 관련 서치관련 플러그인 입니다.

https://chrome.google.com/webstore/detail/hgcbffeicehlpmgmnhnkjbjoldkfhoin

 

  

주소입력란에 ‘ad’ 를 치고 띄우게 되면 바로 sdk 서치로 가면서 검색이 되게 됩니다.

AppCompatActivity 를 사용하는 경우 Menu 에서 showAsAction 설정을 쓰고자 하는 경우

- app namespace 를 추가한다.

- android:showAsAction 이 아닌 app:showAsAction 형태로 사용한다.



<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/menu_refresh"
android:title="@string/menu_refresh"
android:icon="@drawable/ic_menu_refresh"
android:orderInCategory="1"
app:showAsAction="always|withText"/>


</menu>


출처 : http://thdev.net/625

 Android Actionbar가 deprecated 되었습니다. 초기 Android service가 비 정상적인 동작으로 ActionBar를 사용하는 경우 다운되기도 하였습니다. 현재는 그 강제 종료되는 증상은 사라졌지만 deprecated 되었으니 새로운 Toolbar를 사용해야 합니다. Toolbar 사용법을 살펴보겠습니다.



API 21에 추가된 Toolbar 및 v7.widget.Toolbar

 API 21 Toolbar API 문서 : https://developer.android.com/reference/android/widget/Toolbar.html

 v7.widget.Toolbar API 문서 : https://developer.android.com/reference/android/support/v7/widget/Toolbar.html

하위 호환성을 위해서는 v7 widget의 Toolbar를 사용하는게 좋겠습니다.


이 툴바는 support.v7에 추가되었는데 21이상부터 사용이 가능합니다. 현재는 support.v7은 22입니다.

 구글 블로그 : http://android-developers.blogspot.kr/2014/10/appcompat-v21-material-design-for-pre.html



Toolbar가 적용 화면

 Toolbar가 적용된걸 확연하게 확인할 수 있는 부분은 바로 Google launcher와 Play store 입니다. 아래와 같이  최상단의 검색 부분입니다. 이 검색 부분은 커스텀 UI가 아닌 Toolbar를 활용한 모습입니다. 레이아웃의 마진을 줄 수 있고, 기존 Drawable 메뉴도 그대로 노출되어 있습니다. 

 - Toolbar를 활용하여 layout에 20dp의 margen이 들어간 레이어를 구현해보겠습니다.


 

진행 과정

Android studio gradle에 dependencies 확인하기

 - No ActionBar 스타일 적용.

 - Toolbar layout 생성

 - Activity에 사용할 layout에 toolbar layout 적용

 - setSupportActionBar() 함수를 사용하여 적용하기



Android studio gradle에 dependencies 확인하기

 이번 글은 Android Studio 를 기반으로 설명합니다. 이클립스에서는 최신의 v7 라이브러리를 다운로드 받으시면 됩니다.

 생성한 프로젝트의 app.gradle(처음 프로젝트를 생성하면 app 디렉토리 아래에 app.gradle을 찾으시면 됩니다. 

dependencies {
compile 'com.android.support:appcompat-v7:22.1.1'
}

위와 같이 추가되어 있는지 확인해주시면 됩니다. 21.0.0 이상이어야 v7.widget.Toolbar를 사용할 수 있습니다.



NoActionBar 스타일로 변경

 사용 중인 또는 신규 생성한 프로젝트에서 /res/values/styles.xml을 찾아갑니다. 기본적으로 생성된 프로젝트에는 AppCompat. NoActionBar가 아닌 다른 것으로 들어가있을 겁니다. 아래와 같이 NoActionBar 스타일로 변경해줍니다. 어떤 스타일이든 NoActionBar 스타일로 정의만 해주시면 됩니다.

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
</style>

</resources>


Toolbar layout 생성

저는 별도의 layout 파일인 toolbar.xml을 생성하였습니다. android.support.v7.widget.Toolbar가 있어야 하며, 꼭 appcompat-v7:21.0.0 이상의 Appcompat 버전을 가지고 있어야 합니다.


 아래 생성된 toolbar는 기본 actionBarSize를 가지며, 검정색 배경색을 가지고 있습니다. 별도 margin은 없습니다.

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary">
</android.support.v7.widget.Toolbar>


Activity에 사용할 layout에 toolbar layout 적용

 저는 별도의 layout.xml을 생성하였기에 아래와 같이 include를 하였습니다. 기본적인 layout include만 해주면 됩니다.

 생성한 Toolbar는 위에어 별도의 margin을 주지 않았기에 아래와 같이 20dp의 margin을 임의로 적용하였습니다.

<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/toolbar"
android:layout_marginBottom="20dp"/>


setSupportActionBar() 함수를 사용하여 적용하기

 마지막으로 해주어야 할 작업은 아래와 같습니다. Toolbar UI는 setContentView 이후에 처리해주어야 합니다. 기존 설정 방법보다 할일은 좀 많아 지겠지만 원하는 UI 속성을 적용할 수 있겠습니다. 아래와 같이 setSupportActionBar를 처리해주시면 됩니다.

// Set a toolbar to  replace to action bar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);


Toolbar 로 변경하면서 생기는 장/단점

 장점으로는 액션바에 아래와 같이 Layout margin을 쉽게 줄 수 있다는 점입니다. 기존에는 커스텀으로 만들거나, 액션바를 커스텀 하기도 했던것 같습니다. 좀 더 쉽게 적용할 수 있게 되었습니다. 또한 ActionBar 속성을 그대로 가지고 있기때문에 기존에 제공하던 투명 설정도 그대로 유지할 수 있습니다.


 단점으로는 교체 비용이 발생하겠죠. 그래서 추천하는 방법은 액션바에 마진을 적용하는 등의 설정이 필요하다면 필요한 페이지에만 아래와 같은 Toolbar를 적용하는걸 추천드립니다.

 



Android Toolbar Example

 Github에 업로드한 Toolbar example 전체 코드입니다.

 Github : https://github.com/taehwandev/AndroidToolbarExample


+ Recent posts