2012. 3. 21. 02:58

//////////////////////////////////////////

//웹소켓을 처리하는 도중 핸드폰의 특성상 네트워크환경을 많이 타게 된다. 그때문에 만들게 된 소스..

/////////////////////////////////////////////


BroadcastReceiver networkStateReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {

// Log.e("Network Listener", "________Network Type Changed");

String action = intent.getAction();

if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.e("TAG", "_______Receiver onConnectivity");

NetworkInfo info = intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

if (info == null) {
Log.e("TAG", "________No Network Info Available");

return;
}

Log.e("_network statues_", "___________"
+ info.getState().toString());
if (info.isConnected()) {

try {
// Log.e("aaaaaaa", "___" + getUser);

iosocket = new IOSocket("ws://115.68.23.219:3000",
getUser, service.this);
iosocket.connect();

} catch (IOException e) {
e.printStackTrace();
}

Log.e("TAG", "________Broadcast: Network Up");
// Restart any downloads.
// Send any pending transactions.
// Start any async tasks.
// (optional) Request partial wakelock to allow
// networking to continue.
return;
} else {
// iosocket.
try {
iosocket.getWebSocket().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("TAG", "________Broadcast: Network Down");

}
return;
}

}
};

IntentFilter filter = new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkStateReceiver, filter);

Posted by k1rha
2012. 3. 21. 02:57

ㅇpending intent 의 0 이라는 인자값을 updtae 로 고쳐준다.

}

Intent intent2 = new Intent(this, Alram.class);
// intent2.putExtra("title", _title);
intent2.setAction(SCHEDULED_PROFILE);
intent2.putExtra("SID", (long)actionDBId);


sender = PendingIntent.getBroadcast(this, check, intent2, PendingIntent.FLAG_UPDATE_CURRENT);

===================================================

받을때는 요로콤

String test;

public void onReceive(Context context, Intent intent) {
// Log.e("aaa","______________");
mNotiManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification noti = new Notification(R.drawable.ic_launcher, "일정 알림",
System.currentTimeMillis());

Uri data = intent.getData();
test = intent.getStringExtra("value");

Posted by k1rha
2012. 3. 21. 02:56

m = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);


// m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); //토글 사용하여 키보드 보이기
// m.hideSoftInputFromWindow(windowToken, flags)

m.toggleSoftInput(InputMethodManager.RESULT_SHOWN,InputMethodManager.RESULT_SHOWN); //강제로 키보드 보이기

m.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); //강제로 키보드 감추기

Posted by k1rha
2012. 3. 21. 02:55
private Boolean isServiceRunning(String serviceName) {

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo runningServiceInfo : activityManager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceName.equals(runningServiceInfo.service.getClassName())) {
return true;
}
}
return false;
}
Posted by k1rha
2012. 3. 21. 02:55
소프트키보드 상태에 따라 이벤트 발생시키기
Android 2011/11/18 13:55 Posted by 기분째즈
당황스럽게도 안드로이드에는 키보드가 떴는지 안떴는지를 알 수 있는 API도 없고, 이벤트도 없습니다.

우회해서 알아내야하는데요.

터치이벤트 자체를 낚아채서 강제로 이벤트를 주면서 키보드 상태를 알아내는 법. 화면사이즈 변경된 걸로 알아내는 법. 몇몇 방법이 있지만 재사용하기 편한 건 키보드가 뜨면서 화면크기가 변경된 걸 알아내는 뷰 하나 만들어서 화면에 붙이는 게 편하더군요.

주의점은 AndroidManifest.xml에서 android:windowSoftInputMode 에 adjustResize 속성을 추가해야합니다.

키보드 등장에 화면크기가 바뀌는 걸로 설정했기 때문에 키보드 등장에 의한 자동 스크롤(Pan)은 되지않습니다.


키보드 알아내는 뷰.
SoftKeyboardDectectorView.java 소스 내용


package com.givenjazz.android;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
 
public class SoftKeyboardDectectorView extends View {
 
    private boolean mShownKeyboard;
    private OnShownKeyboardListener mOnShownSoftKeyboard;
    private OnHiddenKeyboardListener onHiddenSoftKeyboard;
 
    public SoftKeyboardDectectorView(Context context) {
        this(context, null);
    }
 
    public SoftKeyboardDectectorView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        Activity activity = (Activity)getContext();
        Rect rect = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
        int statusBarHeight = rect.top;
        int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
        int diffHeight = (screenHeight - statusBarHeight) - h;
        if (diffHeight > 100 && !mShownKeyboard) { // 모든 키보드는 100px보다 크다고 가정
            mShownKeyboard = true;
            onShownSoftKeyboard();
        } else if (diffHeight < 100 && mShownKeyboard) {
            mShownKeyboard = false;
            onHiddenSoftKeyboard();
        }
        super.onSizeChanged(w, h, oldw, oldh);
    }
 
    public void onHiddenSoftKeyboard() {
        if (onHiddenSoftKeyboard != null)
            onHiddenSoftKeyboard.onHiddenSoftKeyboard();
    }
 
    public void onShownSoftKeyboard() {
        if (mOnShownSoftKeyboard != null)
            mOnShownSoftKeyboard.onShowSoftKeyboard();
    }
 
    public void setOnShownKeyboard(OnShownKeyboardListener listener) {
        mOnShownSoftKeyboard = listener;
    }
 
    public void setOnHiddenKeyboard(OnHiddenKeyboardListener listener) {
        onHiddenSoftKeyboard = listener;
    }
 
    public interface OnShownKeyboardListener {
        public void onShowSoftKeyboard();
    }
 
    public interface OnHiddenKeyboardListener {
        public void onHiddenSoftKeyboard();
    }
}


사용 예) 사용하는 activity의 onCreate같은 곳에 다음과 같이 사용 

final SoftKeyboardDectectorView softKeyboardDecector = new SoftKeyboardDectectorView(this);
addContentView(softKeyboardDecector, new FrameLayout.LayoutParams(-1, -1));
 
softKeyboardDecector.setOnShownKeyboard(new OnShownKeyboardListener() {
 
    @Override
    public void onShowSoftKeyboard() {
        //키보드 등장할 때
    }
});
 
softKeyboardDecector.setOnHiddenKeyboard(new OnHiddenKeyboardListener() {
 
    @Override
    public void onHiddenSoftKeyboard() {
        // 키보드 사라질 때
    }
});<br>
Posted by k1rha
2012. 3. 21. 02:54

안드로이드 블루투스를 사용하기 위해서 소켓 생성시 아래와 같은 메소드를 사용한다.

서버 소켓 - listenUsingRfcommWithServiceRecord()

클라이언트 소켓 - createRfcommSocketToServiceRecord()

해당 소켓을 생성할 떄 UUID 라는 것이 필요하다.

해당 프로토콜을 의미하는 id 인데.. 안드로이드 플랫폼위의 단말에서의 시리얼 통신은 아무 UUID 를 사용하여도 된다.

하지만 특정 프로토콜에 접근하기 위해서는 아래에 나와 있는 프로토콜 UUID 를 사용해야 한다.

예를 들어 단말 타겟 - 컴퓨터 연결이라던지, 단말 - 블루투스 헤드셋 등이 있다.

만약 어떤 디바이스에서 안드로이드 블루투스 연결이 되지 않는다면, 될때까지 uuid 를 하나씩 넣어보면서 찾는 즐거움(??)을 가져보도록 하자^^

현재 2.1까지는 헤드셋 연결 시 ACL 링크만 가능하다(up stream)

SCO 연결을 해볼려고 블루투스 라이브러리를 통째로 jni로 빌드해서 호출 해보았으나.. 생성 - 바인드 까지는 성공 했으나..

연결시 퍼미션 에러가 났다-_-;;

만약 2.1에서 블루투스 헤드셋 SCO 연결 성공한 사례가 나온다면 그분 대박 나실듯~ㅋ

현재는 bluetooth 쪽 회사와 device 작업중인데.. 디바이스 쪽에서 무언가 해결책이 나오기를 바래본다 ㅠ0ㅠ

rotocols UUID http://www.bluetooth.org/assigned-numbers/sdp.htm

BASE UUID = '{00000000-0000-1000-8000-00805F9B34FB}';

SDP_PROTOCOL_UUID         = '{00000001-0000-1000-8000-00805F9B34FB}';
UDP_PROTOCOL_UUID         = '{00000002-0000-1000-8000-00805F9B34FB}';
RFCOMM_PROTOCOL_UUID      = '{00000003-0000-1000-8000-00805F9B34FB}';
TCP_PROTOCOL_UUID         = '{00000004-0000-1000-8000-00805F9B34FB}';
TCSBIN_PROTOCOL_UUID      = '{00000005-0000-1000-8000-00805F9B34FB}';
TCSAT_PROTOCOL_UUID       = '{00000006-0000-1000-8000-00805F9B34FB}';
OBEX_PROTOCOL_UUID        = '{00000008-0000-1000-8000-00805F9B34FB}';
IP_PROTOCOL_UUID          = '{00000009-0000-1000-8000-00805F9B34FB}';
FTP_PROTOCOL_UUID         = '{0000000A-0000-1000-8000-00805F9B34FB}';
HTTP_PROTOCOL_UUID        = '{0000000C-0000-1000-8000-00805F9B34FB}';
WSP_PROTOCOL_UUID         = '{0000000E-0000-1000-8000-00805F9B34FB}';
BNEP_PROTOCOL_UUID        = '{0000000F-0000-1000-8000-00805F9B34FB}';
UPNP_PROTOCOL_UUID        = '{00000010-0000-1000-8000-00805F9B34FB}';
HID_PROTOCOL_UUID         = '{00000011-0000-1000-8000-00805F9B34FB}';
HCCC_PROTOCOL_UUID        = '{00000012-0000-1000-8000-00805F9B34FB}';
HCDC_PROTOCOL_UUID        = '{00000014-0000-1000-8000-00805F9B34FB}';
HN_PROTOCOL_UUID          = '{00000016-0000-1000-8000-00805F9B34FB}';
AVCTP_PROTOCOL_UUID       = '{00000017-0000-1000-8000-00805F9B34FB}';
AVDTP_PROTOCOL_UUID       = '{00000019-0000-1000-8000-00805F9B34FB}';
CMPT_PROTOCOL_UUID        = '{0000001B-0000-1000-8000-00805F9B34FB}';
UDI_C_PLANE_PROTOCOL_UUID = '{0000001D-0000-1000-8000-00805F9B34FB}';
L2CAP_PROTOCOL_UUID       = '{00000100-0000-1000-8000-00805F9B34FB}';




Ref. Service class IDs http://www.bluetooth.org/assigned-numbers/sdp.htm

ServiceDiscoveryServerServiceClassID_UUID       = '{00001000-0000-1000-8000-00805F9B34FB}';
BrowseGroupDescriptorServiceClassID_UUID        = '{00001001-0000-1000-8000-00805F9B34FB}';
PublicBrowseGroupServiceClass_UUID              = '{00001002-0000-1000-8000-00805F9B34FB}';
SerialPortServiceClass_UUID                     = '{00001101-0000-1000-8000-00805F9B34FB}';
LANAccessUsingPPPServiceClass_UUID              = '{00001102-0000-1000-8000-00805F9B34FB}';
DialupNetworkingServiceClass_UUID               = '{00001103-0000-1000-8000-00805F9B34FB}';
IrMCSyncServiceClass_UUID                       = '{00001104-0000-1000-8000-00805F9B34FB}';
OBEXObjectPushServiceClass_UUID                 = '{00001105-0000-1000-8000-00805F9B34FB}';
OBEXFileTransferServiceClass_UUID               = '{00001106-0000-1000-8000-00805F9B34FB}';
IrMCSyncCommandServiceClass_UUID                = '{00001107-0000-1000-8000-00805F9B34FB}';
HeadsetServiceClass_UUID                        = '{00001108-0000-1000-8000-00805F9B34FB}';
CordlessTelephonyServiceClass_UUID              = '{00001109-0000-1000-8000-00805F9B34FB}';
AudioSourceServiceClass_UUID                    = '{0000110A-0000-1000-8000-00805F9B34FB}';
AudioSinkServiceClass_UUID                      = '{0000110B-0000-1000-8000-00805F9B34FB}';
AVRemoteControlTargetServiceClass_UUID          = '{0000110C-0000-1000-8000-00805F9B34FB}';
AdvancedAudioDistributionServiceClass_UUID      = '{0000110D-0000-1000-8000-00805F9B34FB}';
AVRemoteControlServiceClass_UUID                = '{0000110E-0000-1000-8000-00805F9B34FB}';
VideoConferencingServiceClass_UUID              = '{0000110F-0000-1000-8000-00805F9B34FB}';
IntercomServiceClass_UUID                       = '{00001110-0000-1000-8000-00805F9B34FB}';
FaxServiceClass_UUID                            = '{00001111-0000-1000-8000-00805F9B34FB}';
HeadsetAudioGatewayServiceClass_UUID            = '{00001112-0000-1000-8000-00805F9B34FB}';
WAPServiceClass_UUID                            = '{00001113-0000-1000-8000-00805F9B34FB}';
WAPClientServiceClass_UUID                      = '{00001114-0000-1000-8000-00805F9B34FB}';
PANUServiceClass_UUID                           = '{00001115-0000-1000-8000-00805F9B34FB}';
NAPServiceClass_UUID                            = '{00001116-0000-1000-8000-00805F9B34FB}';
GNServiceClass_UUID                             = '{00001117-0000-1000-8000-00805F9B34FB}';
DirectPrintingServiceClass_UUID                 = '{00001118-0000-1000-8000-00805F9B34FB}';
ReferencePrintingServiceClass_UUID              = '{00001119-0000-1000-8000-00805F9B34FB}';
ImagingServiceClass_UUID                        = '{0000111A-0000-1000-8000-00805F9B34FB}';
ImagingResponderServiceClass_UUID               = '{0000111B-0000-1000-8000-00805F9B34FB}';
ImagingAutomaticArchiveServiceClass_UUID        = '{0000111C-0000-1000-8000-00805F9B34FB}';
ImagingReferenceObjectsServiceClass_UUID        = '{0000111D-0000-1000-8000-00805F9B34FB}';
HandsfreeServiceClass_UUID                      = '{0000111E-0000-1000-8000-00805F9B34FB}';
HandsfreeAudioGatewayServiceClass_UUID          = '{0000111F-0000-1000-8000-00805F9B34FB}';
DirectPrintingReferenceObjectsServiceClass_UUID = '{00001120-0000-1000-8000-00805F9B34FB}';
ReflectedUIServiceClass_UUID                    = '{00001121-0000-1000-8000-00805F9B34FB}';
BasicPringingServiceClass_UUID                  = '{00001122-0000-1000-8000-00805F9B34FB}';
PrintingStatusServiceClass_UUID                 = '{00001123-0000-1000-8000-00805F9B34FB}';
HumanInterfaceDeviceServiceClass_UUID           = '{00001124-0000-1000-8000-00805F9B34FB}';
HardcopyCableReplacementServiceClass_UUID       = '{00001125-0000-1000-8000-00805F9B34FB}';
HCRPrintServiceClass_UUID                       = '{00001126-0000-1000-8000-00805F9B34FB}';
HCRScanServiceClass_UUID                        = '{00001127-0000-1000-8000-00805F9B34FB}';
CommonISDNAccessServiceClass_UUID               = '{00001128-0000-1000-8000-00805F9B34FB}';
VideoConferencingGWServiceClass_UUID            = '{00001129-0000-1000-8000-00805F9B34FB}';
UDIMTServiceClass_UUID                          = '{0000112A-0000-1000-8000-00805F9B34FB}';
UDITAServiceClass_UUID                          = '{0000112B-0000-1000-8000-00805F9B34FB}';
AudioVideoServiceClass_UUID                     = '{0000112C-0000-1000-8000-00805F9B34FB}';
PnPInformationServiceClass_UUID                 = '{00001200-0000-1000-8000-00805F9B34FB}';
GenericNetworkingServiceClass_UUID              = '{00001201-0000-1000-8000-00805F9B34FB}';
GenericFileTransferServiceClass_UUID            = '{00001202-0000-1000-8000-00805F9B34FB}';
GenericAudioServiceClass_UUID                   = '{00001203-0000-1000-8000-00805F9B34FB}';
GenericAudioServiceClass_UUID                   = '{00001203-0000-1000-8000-00805F9B34FB}';
GenericTelephonyServiceClass_UUID               = '{00001204-0000-1000-8000-00805F9B34FB}';
UPnPServiceClass_UUID                           = '{00001205-0000-1000-8000-00805F9B34FB}';
UPnPIpServiceClass_UUID                         = '{00001206-0000-1000-8000-00805F9B34FB}';
ESdpUPnPIpPanServiceClass_UUID                  = '{00001300-0000-1000-8000-00805F9B34FB}';
ESdpUPnPIpLapServiceClass_UUID                  = '{00001301-0000-1000-8000-00805F9B34FB}';
EdpUPnpIpL2CAPServiceClass_UUID                 = '{00001302-0000-1000-8000-00805F9B34FB}';
Posted by k1rha
2012. 3. 21. 02:53

 controlInflater = LayoutInflater.from(getBaseContext());
View viewControl = controlInflater.inflate(R.layout.camerarecord, null);
LayoutParams layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
this.addContentView(viewControl, layoutParamsControl);

inflater layout을 쓰면되는데

main.xml 외에 다른 xml 을 만든고 거기에 디자인을 한다.

이후에 infater로 합쳐주면되는데 controlinflater,inflate(R.layout 부분이 기존외에 합쳐질 레이아웃이다. 

Posted by k1rha
2012. 3. 21. 02:52

탱크게임을 만들다가.. 도저히 게임성이 안나와서

스나이퍼 모드로 변경하고 있는중이다..

스나이퍼 모양이 뜨고.. 거리에 따라 줌을 당겨야하는 미션..

한데 이 카메라 줌이라는게 생각보다 찾아도 잘없다..

if(temp>=30){
temp=0;
}else{
temp+=10;

}

Camera.Parameters parameters = mCameraDevice.getParameters();
parameters.setZoom(temp);
mCameraDevice.setParameters(parameters);

이렇게 간단히 해결될수 있는 것을...

mCameraDevice가 카메라 객체를 가져온것이다. 

Posted by k1rha
2012. 3. 21. 02:52
1 package exm.timer;
2
3 import java.util.*;
4
5 import android.app.Activity;
6 import android.os.Bundle;
7 import android.util.*;
8 import android.view.*;
9 import android.view.View. Listener;
10 import android.widget.*;
11
12 public class TimerExample extends Activity {
13
14 private TimerTask mTimer;
15 private Button mBtnStart, mBtnStop;
16 private Timer timer = new Timer();
17
18 /-* Called when the activity is first created. *-
19 @Override
20 public void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.main);
23
24 initSetting();
25 btnEvent();
26 }
27
28 private void initSetting() {
29 mBtnStart = (Button) findViewById(R.id.btnstart);
30 mBtnStop = (Button) findViewById(R.id.btnstop);
31 }
32
33 private void btnEvent() {
34 mBtnStart.set Listener(new Listener() {
35
36 @Override
37 public void (View v) {
38 TimerMethod();
39 }
40 });
41
42 mBtnStop.set Listener(new Listener() {
43
44 @Override
45 public void (View v) {
46 stopTimer();
47 }
48 });
49 }
50
51 private void TimerMethod() {
52 mTimer = new TimerTask() {
53
54 @Override
55 public void run() {
56 Log.d("TIMER", "" + System.currentTimeMillis());
57 }
58 };
59
60 timer.schedule(mTimer, 2000, 3000);
61 }
62
63 private void stopTimer() {
64 // timer.cancel();
65 mTimer.cancel();
66 }
67
68 }
Posted by k1rha
2012. 3. 21. 02:51
나름대루 썸네일 함수를 만들어 봤습니다. 잘 되더군염..
gif, jpg, png 파일이 가능하구염..

function thumnail($file, $save_filename, $save_path, $max_width, $max_height) {

// 전송받은 이미지 정보를 받는다
$img_info = getImageSize($file);

// 전송받은 이미지의 포맷값 얻기 (gif, jpg png)
if($img_info[2] == 1) {
$src_img = ImageCreateFromGif($file);
} else if($img_info[2] == 2) {
$src_img = ImageCreateFromJPEG($file);
} else if($img_info[2] == 3) {
$src_img = ImageCreateFromPNG($file);
} else {
return 0;
}

// 전송받은 이미지의 실제 사이즈 값얻기
$img_width = $img_info[0];
$img_height = $img_info[1];

if($img_width <= $max_width) {
$max_width = $img_width;
$max_height = $img_height;
}

if($img_width > $max_width){
$max_height = ceil(($max_width / $img_width) * $img_height);
}

// 새로운 트루타입 이미지를 생성
$dst_img = imagecreatetruecolor($max_width, $max_height);

// R255, G255, B255 값의 색상 인덱스를 만든다
ImageColorAllocate($dst_img, 255, 255, 255);

// 이미지를 비율별로 만든후 새로운 이미지 생성
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $max_width, $max_height, ImageSX($src_img),ImageSY($src_img));

// 알맞는 포맷으로 저장
if($img_info[2] == 1) {
ImageInterlace($dst_img);
ImageGif($dst_img, $save_path.$save_filename);
} else if($img_info[2] == 2) {
ImageInterlace($dst_img);
ImageJPEG($dst_img, $save_path.$save_filename);
} else if($img_info[2] == 3) {
ImagePNG($dst_img, $save_path.$save_filename);
}

// 임시 이미지 삭제
ImageDestroy($dst_img);
ImageDestroy($src_img);
Posted by k1rha