1) MFC Server or Client에서 Android Client or Server로 한글 전달.

 - Window/MFC  : Unicode "UTF-16" Type, Byte Order(리틀엔디안)

 - Android/Java  : Unicode "UTF-16" Type, Byte Order(빅 엔디안)

    public  void ByteSwap(byte[]b, int nCnt) {
        byte Buf= 0;
        for(int i=0; i<nCnt; i+=2){
            Buf =b[i];
            b[i] =b[i+1];
            b[i+1] = Buf;
        }
    }
	String line;
	byte [] bDataByte =new byte[2048];
		
	int nCnt = input.read(bDataByte);
	ByteSwap(bDataByte, nCnt );//Byte Order가 다르다(앞뒤 변경) 그리고 UTF-16 Type으로)
 		
	String text = new String(bDataByte, "UTF-16");//, "UTF-8");//"EUC-KR");//"UTF-8");
	line = "("+ nCnt +")"+text;

 

* Intel x86, x64, AMD 리틀엔디안을 사용.
* Java는(JVM 에서 동작) 빅 엔디안 사용.

1) 초기 실행시 생성 Edit에 커서가 있어 KeyPad가 올라와 있는 상태를 피하기 위해.(Editer에 의한)

"Activity_main.xml"의  Layout 항목에 추가.

android:focusable="true"
android:focusableInTouchMode="true"

 

2) 화면 회전에 의한 Reset 방지 추가(세로 상태에서 가로로 변환될때 Reload 상태가 되에 S/W Reset된다.)

 -적당한 처리를 해주거나 회전 방지를 해준다.

android:configChanges="orientation|screenSize"

 

-변환에대한 처리를 해줄 경우. onConfigurationChanged()함수 재정의

'작업 > Android' 카테고리의 다른 글

PC(MFC:Unicode)에서 Android로 한글 전송  (0) 2019.10.31
Android SMS 전송 - 주의점!!!  (0) 2019.10.29
Android Socket 생성 - 주의점!!!  (0) 2019.10.28

안드로이드 SMS보내기.

   - 1번이 권한 부여가 없으면 프로그램이 이상종료한다. try-catch를 통해 Error원인을 찾고 조치가 필요하다.
   - 3번은 정보는 Internet에 많으니 참고.

 

1) 권한 부여 Permission 중요!( 참조 https://satisfactoryplace.tistory.com)
  static final int SMS_RECEIVE_PERMISSON=1;

  //권한이 부여되어 있는지 확인
  int permissonCheck= ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
  if(permissonCheck == PackageManager.PERMISSION_GRANTED){
    Toast.makeText(getApplicationContext(), "SMS 수신권한 있음", Toast.LENGTH_SHORT).show();
  }else{
    Toast.makeText(getApplicationContext(), "SMS 수신권한 없음", Toast.LENGTH_SHORT).show();

  //권한설정 dialog에서 거부를 누르면
  //ActivityCompat.shouldShowRequestPermissionRationale 메소드의 반환값이 true가 된다.
  //단, 사용자가 "Don't ask again"을 체크한 경우
  //거부하더라도 false를 반환하여, 직접 사용자가 권한을 부여하지 않는 이상, 권한을 요청할 수 없게 된다.
  if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)){
  //이곳에 권한이 왜 필요한지 설명하는 Toast나 dialog를 띄워준 후, 다시 권한을 요청한다.
    Toast.makeText(getApplicationContext(), "SMS권한이 필요합니다", Toast.LENGTH_SHORT).show();
    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.RECEIVE_SMS},       SMS_RECEIVE_PERMISSON);
  }else{
    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.RECEIVE_SMS}, SMS_RECEIVE_PERMISSON);
  }
}
    

2) 권한 부여 "AndroidMainifest.xml"

"<uses-permission android:name="android.permission.SEND_SMS" />"
"<uses-permission android:name="android.permission.RECEIVE_SMS" />"
"<uses-permission android:name="android.permission.READ_PHONE_STATE" />"


3) SMS 전송
String phoneNo = "010XXXXXXXX";
String sms = "폰에서 자동으로 보내는 메시지 입니다.";
try {
         SmsManager smsManager = SmsManager.getDefault();
         smsManager.sendTextMessage(phoneNo, null, sms, null, null);
         Toast.makeText(getApplicationContext(), "전송 완료!", Toast.LENGTH_LONG).show();
} catch (Exception e) {
         Toast.makeText(getApplicationContext(), "전송 오류!", Toast.LENGTH_LONG).show();
         Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();//오류 원인이 찍힌다.
         e.printStackTrace();
}

 

1) 권한 추가 "AndroidManifest.xml"

  "<uses-permission android:name="android.permission.INTERNET"/>"

 

2) Socket 생성은 Thread에서 생성한다. (onCreate()나 Main Process에서 만들면 Error발생.)

private Thread InitSocket = new Thread() {
    public void run() {
    try {
        socket = new Socket(ip, port); //<<========이런 식으로.
    } catch (IOException e1) {
        e1.printStackTrace();
    }
};

 OnCreate()에서 CreateSocket.start();

 

 

 

*추가 : Host Name으로 접속 시도

Socket socket = new Socket();

InetSocketAddress address = new InetSocketAddress("SW_CCH", 8500);

socket.connect(address);

+ Recent posts