2011년 6월 19일 일요일

Activity 의 내용을 작성할 때 유용한 방법

Activity 는 뒤로가기나 다른 Activity로 전환되었을 때 Activity Stack에 남아 있어, 뒤로가기 버튼이나 startActivityForResult 등으로 원래의 Activity로 돌아갈 때, 그 전의 내용이 그대로 남아 있게 됩니다.

이 때, 화면이 전환 될때 마다 화면의 내용이 업데이트 되어야 할 부분이 생길수도 있는데요,
예를 들어 겔러리 폴더에서 사진을 찍고 다시 겔러리 폴더로 돌아오면 방금찍은 사진이 업데이트 되어 있어야 겠죠?
이런 내용을 처리할 때 유용하게 쓰입니다.

아래 코드를 참고해 주세요.

public class Example extends Activity{
public void onCreate(Bundle savedInstanceState) {
init();
update();
}

@Override
public void onRestart(){
super.onRestart();
update();
}
private void init(){
}

private void update(){
}
}

위에 처럼 코드를 작성할 때, onCreate 에 init, update 두가지를 작성합니다.
그래서 init은 해당 Activity가 생성 될때 필요한 것들, 예를들어 findViewById 로 View를 변수에 할당한다던지, 이벤트 리스너를 단다는 등 내용들을 추가합니다.

그리고 update 함수에는, 매번 업데이트 되어야 하는 내용들, 예를들어 시간을 표시한다던지, 겔러리에서 사진을 보여준다던지 하는 항목들은 Activity 가 재시작 되었을 때, 항상 갱신되어야 하는 내용들을 넣습니다.

이렇게 되면 Activity 가 전환되어도 잘 작동하고, 코드를 작성할 때도 가독성이 좀 더 좋아지는 것 같아서, 계속 이방법을 쓰고 있습니다.
참고 하시구요, 더 좋은 방법 있으면 알려주세요~^^

WebView 내에서 플래시 파일 재생중 액티비티를 빠져 나갔는데도, 음악이 재생될 때

문제점

안드로이드 애플리케이션 내의 WebView 에서 플래시 파일을 재생하고 있는데, 뒤로가기 버튼을 누르거나 혹은 intent로 다른 Activity로 넘어가게 되도 해당 플래시 파일은 계속 재생됩니다. 이때, 다른 Activity 로 넘어 갔는데도 불구하고, 이전 Activity 에서 재생되던 플래시에서 소리가 나는 등의 문제가 발생 합니다.
 
해결책

public class FlashPlayerWebView{
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
webView = (WebView)findViewById(R.layout.flash_player_webview);
}
public void onPause(){
super.onPause();
webView.loadUrl("about:blank");
}
}

Activity 가 생성될 때, webView 에 Flash 가 재생될 Url을 호출한다.
여기에서 onPause() 에 해당하는 내용을 처리하지 않으면, 뒤로가기 버튼을 누르거나 혹은 다른 Activity 로 전환되었을때도 Activity Stack 에 계속 남아 있어 플래시가 계속 재생된다.
Activity가 전환될때, onPause() 함수가 호출되는데, 위의 코드 처럼 해당 webview에 다른 url 을 호출하면 플래시가 재생되는 것을 막을 수 있다.

Activity 를 이용한 비밀번호 컴포넌트

Activity 를 이용하여 간단한 비밀번호를 걸 수 있는 컴포넌트를 소개합니다.

개요
만약 A라는 액티비티를 띄워야 할때,
  • 프로그램 실행 -> A 액티비티 실행
이러한 절차를 해당 패스워드 액티비트를 설정해서
  • 프로그램 실행 -> 패스워드 액티비티 실행 -> (비밀번호를 확인후) A 액티비티 실행

이러한 구조로 바꾸어 패스워스 기능을 설정할 수 있습니다. 그외에도 아래와 같은 기능도 제공합니다.
  • 비밀번호 변경 : 기존의 비밀번호 입력 -> 새 비밀번호 입력 -> 비밀번호 확인-> 해당 액티비티로 이동
  • 비밀번호 초기화 : 새비밀번호 입력 -> 비밀번호 확인 -> 해당 액티비티로 이동

사용법

비밀번호 확인
만약 현재 액티비티에서 비밀번호를 확인후에 com.android.a.ViewProfile 을 보여주고 싶으면 다음과 같이 입력하면 됩니다.
1.Intent intent = new Intent(Main.this, Password.class);
2.intent.putExtra(Password.NEXT_ACTIVITY, "com.android.a.ViewProfile");
3.intent.putExtra(Password.PASSWORD, "1234");
4.intent.putExtra(Password.MODE, Password.MODE_CHECK_PASSWORD);
5.startActivity(intent);


Password.NEXT_ACTIVITY는 비밀번호 확인후 이동할 액티비티입니다.
Password.PASSWORD는 사용자가 맞춰야 하는 비밀번호 입니다.
Password.MODE는 옵션으로 어떤 기능을 할 것인지 나타냅니다. (현재는 비밀번호 변경)

비밀번호 변경
현재 액티비티에서 기존의 비밀번호를 확인후 com.android.a.ViewProfile 을 보여주고 싶다면 다음과 같이 하면 됩니다.
아래 코드는 기존의 1234라는 비밀번호를 확인후 새로운 비밀번호를 설정하게 합니다.
Intent intent = new Intent(Main.this, Password.class);
intent.putExtra(Password.NEXT_ACTIVITY, "com.android.a.ViewProfile");
intent.putExtra(Password.PASSWORD, "1234");
intent.putExtra(Password.MODE, Password.MODE_CHANGE_PASSWORD);
startActivity(intent);


변경된 비밀번호 확인비밀번호를 변경하고 com.android.a.ViewProfile 에서 아래와 같이 수정된 비밀번호를 얻을 수 있습니다.
Intent intent = getIntent();
intent.getStringExtra(Password.RESULT_PASSWORD);

응용방법
SharedPreference 에 비밀번호를 저장하고 해당 비밀번호를 intent 값어 주어 비밀번호를 확인할 수 있겠죠?
마찬가지로 비밀번호 변경 역시 RESULT_PASSWORD를 저장하여 변경된 비밀번호 혹은 초기화된 비밀번호로 사용하는 등으로 응용 할 수 있을 것입니다.

그외사항
실행 가능한 예제 프로그램을 첨부하였으니 이를 보면 이해가 되실겁니다. 그리고 간단한 애니메이션과 비밀번호가 틀렸을 때,  어설프게 애니메이션을 주었지만 프로그램에 맞게 수정하시면 될 것 같습니다.
디자인 역시 password.xml 파일을 적절하게 수정하시면 될 것 같습니다.