이 블로그 검색

2012년 10월 31일 수요일

안드로이드 파일 관련 처리


안드로이드 파일 관련 처리....

http://arabiannight.tistory.com/47

2012년 9월 10일 월요일

(안드로이드) 현재시간 구하기


// 현재 시간을 msec으로 구한다.
long now = System.currentTimeMillis();
// 현재 시간을 저장 한다.
Date date = new Date(now);
// 시간 포맷으로 만든다.
SimpleDateFormat sdfNow = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String strNow = sdfNow.format(date);
[출처] 현재시간 구하기|작성자 클린이

2012년 7월 4일 수요일

AppWidget 에서 onReceive, onUpdate

AppWidget에서 onReceive()와 onUpdate()가 있는데,
둘을 다 쓰면 onRecive 가 먼저 호출된다.
따라서 onReceive 에 onUpdate 를 호출하는 코드를 넣지 않으면,
onUpdate를 호출할 수 없다. 그러면 onUpdate 에 있는 코드들이 전혀 실행이 안된다..ㅡㅡ;

따라서 브로드캐스팅을 할 필요가 있어서 onReceive 를 사용하게 되면, 반드시
onUpdate를 호출해주어야 한다.



@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for(int cnt = 0; cnt < appWidgetIds.length; cnt++) {
int appWidgetId = appWidgetIds[cnt];

// String packageNm="com.hanaskcard.android.widgetapp.lgt.hanaskcard";  // 연동할 앱의 팩키지 네임을 넣어준다.
String packageNm="my.test";  // 연동할 앱의 팩키지 네임을 넣어준다.
Log.d("HanaSK", "온 업데이트 실행 ~~~!!!");

            Intent intentCard = context.getPackageManager().getLaunchIntentForPackage(packageNm);  // 타 앱으로 연동.
            PendingIntent pendingIntentCard = PendingIntent.getActivity(context, 0, intentCard, 0);
           
            Intent intentSetting = new Intent(context, SettingMainActivity.class);
            PendingIntent pendingIntentSetting = PendingIntent.getActivity(context, 0, intentSetting, 0);
           
            Intent intentRefresh = new Intent(ACTION_REFRESH);
            PendingIntent pendingIntentRefresh = PendingIntent.getBroadcast(context, appWidgetId, intentRefresh, 0);

            mViews = new RemoteViews(context.getPackageName(), R.layout.hana_m_card_appwidget);
            mViews.setOnClickPendingIntent(R.id.img_maincard, pendingIntentCard);
            mViews.setOnClickPendingIntent(R.id.btn_setting, pendingIntentSetting);
            mViews.setOnClickPendingIntent(R.id.img_refresh, pendingIntentRefresh);
            appWidgetManager.updateAppWidget(appWidgetId, mViews);
           
            refreshWidget();  // 리프레쉬 버튼은 누르지 않았을 때 - 자동 Update 시에도 새 카드 이미지를 가져와야 함.
           
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}

@Override
public void onReceive(Context context, Intent intent){
String action = intent.getAction();

if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
        int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
        if (appWidgetIds != null && appWidgetIds.length > 0) {
            this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
        }
    }
}

if(action.equals(HanaMCardWidgetProvider.ACTION_REFRESH)){
refreshWidget();
}

}

public void refreshWidget(){
Log.d( TAG, "Widget Refresh" );
// AID를 새로 가져와 - getMainCardNumber(),  카드 이미지를 셋팅- setMainCardImg()하는 로직을 넣음.
  //  mViews.setImageViewResource(R.id.imageView1, mainCardImg);
}

2012년 7월 1일 일요일

이클립스 상속받은 메서드나 변수 확인할 때

어떤 클래스를 상속 받았을 때 그 부모의 속성(메서드나 변수) 등을 확인해야 할 때가 있다.

이때는

해당 클래스 선택 후,

ALT + SHIFT + S (여기까지가 우클릭, source 에 해당된다.) ==> V

2012년 5월 10일 목요일



(원본) http://www.action-scripter.com/blog/1288

Xcode provisioning profile Error 

1. 실행중인 Xcode Project를 닫습니다.
2. Finder에서 프로젝트 폴더로 이동합니다.
3. 프로젝트 .xcodeproj 파일 선택하고 마우스 오르쪽 키를 눌러 '패키지 내용 보기'를 선택합니다.
4. 패키지 내용 보기를 통해 패키지 안에 있는 project.pbxproj 파일을 Xcode로 불러옵니다.
5. 검색을 통해 PROVISIONING_PROFILE 부분을 찾아 변경된 Provisioning profile 로 변경해줍니다.
6. 현재 Provisioning profile을 확인하려면 Organizer 창을 열어보면 알 수 있습니다.
7. Window > Organizer로 Organizer 창을 열고 왼쪽에 IPHONE DEVELOPMENT > Provisioning Profiles로 이동합니다.
8. 오른쪽에 있는 Profile Identifier를 복사해서 변경해주면됩니다.
9. 변경이 끝나면 project.pbxproj 저장하고 프로젝트를 열어 테스트합니다.

2012년 4월 23일 월요일

[iOS] addTarget:action:forControlEvents: 사용하기

addTarget:action:forControlEvents: 이 메서드를 사용하면
각각의 컨트롤러에 XIB를 만들지 않고 한 곳에(보통 AppDelegate가 되겠음..) 공통으로 만든 후
여러 페이지에서 쓸 수 있다.
네비게이션 바 처럼 여러 컨트롤러에 공통으로 쓰이는 컴포넌트는 이 메서드를 이용해
공통 UI 에 액션을 적용 시킬 수 있다.


Ex) 

AppDelegate에 다음과 같이 선언..  

UIButton * NaviButton[3];
UIView * m_view;
UITextField *tf;


[NaviButton[0] addTarget:self action:@selector(eventHome) forControlEvents:UIControlEventTouchUpInside];

[NAviButton[1] addTarget:self action:@selector(eventMenu) forControlEvents:UIControlEventTouchUpInside];

[m_view addTarget:tf action:@selector(eventNaviOk) forControlEvents:UIControlEventTouchUpInside];



실제 각 컨트롤러에서 @selector로 보낸 메서드(메세지) 들을 재정의 해주면 된다.


- (void) eventHome
{
    // 재정의
}

- (void) eventMenu
{
    // 재정의
}

- (void)eventNaviOk
{
   // 재정의
    ESignItemDetailCont
roller *hESignItemDetailController = [[ESignItemDetailController alloc]initWithNibName:@"ESignItemDetailController" bundle:nil];
    [self.navigationController pushViewController:hESignItemDetailController animated:YES];
    [hESignItemDetailController release]; 
}


Ex)


statePicker1 = [[CustomArrayPickerView alloc] init]; // 피커를 만듦






//valueStateChange1 메서드
- (void)valueStateChange1:(CustomArrayPickerView*)arrayPicker   
{
    if([self.appDelegate.calledFromWhere isEqualToString:@"1"]){
        searchLbl.text = [arrStateData1 objectAtIndex:arrayPicker.selectedRow];
    }else{
        searchLbl.text = [arrStateData2 objectAtIndex:arrayPicker.selectedRow];
    }
}


[statePicker1 addTarget:self action:@selector(valueStateChange1:) 
forControlEvents:UIControlEventValueChanged];





appDelegate 만들기

iOS 는 특이한 방식으로 전역 함수를 만들어 쓸 수 있다.

방법은 "프로젝트이름AppDelegate.m" 파일에 메서드를 만들어 놓고

self.appDelegate 메서드 이름,  파라메터, .... 형식으로 쓰면 된다.

Ex)
CyberMeritzFireLandAppDelegate.m 파일에 아래와 같은 메서들 만든다.



- (void)addViewType:(UIViewController *)view type:(NSInteger)type
{
    
    if (type == 1)
    {
        m_naviView[0].hidden = NO;
        m_naviView[1].hidden = YES;
        m_naviView[2].hidden = YES;
        m_naviView[3].hidden = YES;
        m_naviView[4].hidden = YES;
        m_naviView[5].hidden = YES;
        m_naviView[6].hidden = YES;
        m_naviView[7].hidden = YES;
        m_naviView[8].hidden = YES;     
    }
    else if (type == 2)
    {
        //, 전체메뉴, 확인
        m_naviView[0].hidden = YES;
        m_naviView[1].hidden = NO;
        m_naviView[2].hidden = YES;
        m_naviView[3].hidden = YES;
        m_naviView[4].hidden = YES;
        m_naviView[5].hidden = YES;
        m_naviView[6].hidden = YES;
        m_naviView[7].hidden = YES;
        m_naviView[8].hidden = YES;

        [m_naviBtn2[0] addTarget:self action:@selector(eventHome) forControlEvents:UIControlEventTouchUpInside];
        [m_naviBtn2[1] addTarget:self action:@selector(eventMenu) forControlEvents:UIControlEventTouchUpInside];
        [m_naviBtn2[2] addTarget:view action:@selector(eventNaviOk) forControlEvents:UIControlEventTouchUpInside];
    }
}




** 이 메서드를 아무데서나,


 [self.appDelegate addViewType:self type:1];
 [self.appDelegate addViewType:sendEmailView type:2];
 ..........


이런식으로 쓸 수 있다..