728x90

안드로이드 어플에서 전화수신 팝업 기능을 테스트 해보고자 검색해보니 http://gun0912.tistory.com/46 에 자료가 있다.


코드를 받아서 보니 Butter Knife 라이브러리를 사용했더라.

한번도 사용을 해보지 않은 거라 그런지 소스코드를 붙여넣기 하니 에러가 발생한다.


검색으로 찾아보니 이 분 블로그에 방법이 나온다.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'com.android.support:support-annotations:24.2.0'
    compile 'com.google.firebase:firebase-messaging:9.6.1'
    // butterknife 추가해주는 것만으로 알아서 import 해 줌
    compile 'com.jakewharton:butterknife:7.0.1'

}

이렇게 하고 나면 Sync Now 를 눌러줘야 한다.


CallingService.java 파일내에 코드에서 에러가 해결되지 않는 곳이 있다.

@InjectView(R.id.tv_call_number) TextView tv_call_number;

ButterKnife.inject(this, rootView);


import butterknife.InjectView;
부분을 인식할 수 없다고 나온다.


문제 해결을 위해서 구글링을 해보니 http://jakewharton.github.io/butterknife/ 에서 확인하라고 나온다.


버전이 높아지면서 기능이 변경되었다는 걸 알 수 있었다.

compile 'com.jakewharton:butterknife:8.5.1'


기 존

수 정

 @InjectView(R.id.tv_call_number)
 TextView tv_call_number;
 @BindView(R.id.tv_call_number)
 TextView tv_call_number;

 ButterKnife.inject(this, rootView);

 ButterKnife.bind(this, rootView);


Gradle 에 버전을 수정해주고 코드를 수정하고나서 에러 메시지가 없어졌다.


이제 컴파일하여 코드를 테스트하는데 코드가 비정상적으로 동작하면서 죽는다.

원인이 정확하게 해결되지 않았나 보다..

원인 해결되면 수정 정리해야겠다.


블로그 이미지

Link2Me

,
728x90

삼성폰은 쉽게 USB 디버깅을 설정할 수 있는데 LG G5 폰에서 USB 디버깅(개발자모드)를 활성화시키는 방법을 몰라서 고생을 좀 했다.


1. LG USB 통합드라이버를 홈페이지에서 받아서 설치한다.

    http://www.lge.co.kr/lgekor/download-center/downloadCenterList.do

    소프트웨어 다운로드

    LG United Mobile Driver(LG 360 캠 포함)


    ※ Firefox 브라우저에서 다운로드 했더니 죽어도 안되더라. 그래서 Explorer 로 받았더니 받아지네. 우라질 ^^


2. 폰에서 설정변경 방법

    설정 --> 시스템 --> 휴대폰 정보 --> 소프트웨어정보 --> 빌드번호

    빌드번호가 보일 것이다.

    빌드번호를 7번 눌러주면 개발자 모드가 활성화된다.


3. Android Studio 에서 인식이 안된다.

   왜 그런지 도저히 원인을 찾을 수가 없다.


2017.9.21일 추가사항

- 개발자 모드가 활성화되면 폰 인식을 시킬 수 있는 단계까지 준비가 된 거더라.

  최근에 삼성폰 외에 다른 폰에서도 기능이 제대로 동작되는지 확인하기 위해서

  LG폰을 구해서 꼭 테스트를 해야 되어서 테스트를 하다가 인식하도록 하는 걸 찾아냈다.

  삼성폰은 개발자 모드 활성화만 시키면 인식되는데, LG폰은 개발자 모드 ON 으로 꼭 한번 더 해줘야....

- 개발자 옵션으로 일단 들어간다.

  상단에 ON/OFF 하는 버튼이 보인다. 이걸 먼저 눌러야 한다.

  먼저 OFF 로 설정한 다음에 ON으로 다시 설정한다. 

- USB 디버깅을 ON 으로 변경하면 이제 변경이 된다.

  이렇게 하면 폰에서 인식이 된다.

블로그 이미지

Link2Me

,
728x90

어플을 Android 5.1 버전에서는 문제없이 잘 동작했는데 6.0에서 테스트를 하니까 로그인 자체가 안된다.


해결방법으로 간단한 방법을 알아보자.



 

target SDK 가 23이상이면 안된다.

인스톨시 버전을 낮춰야 한다. 버전이 높으면 위와 같이 직접 수동으로 처리해주는 것이 최선의 방법인거 같다.

블로그 이미지

Link2Me

,
728x90

스마트폰에서 동보문자를 발송할 수 있는 한도에 대한 것이 궁금해서 삼성전자서비스 사이트에서 가져와서 적어둔다.


http://www.samsungsvc.co.kr/online/diagnosisgoVw.do?domainId=NODE0000033866&node_Id=NODE0000143559&kb_Id=KNOW0000020397


한 내용의 메시지를 여러 명에게 한 번에 전송할 수 있다.


모델 SKT KT LG U+
갤럭시노트2 기준
(SHV-E250S/K/L)
25개 25개 30개
갤럭시S5 LTE-A
(SM-G906S/K/L)
100개 25개 30개
갤럭시노트4
(SM-N910S/K/L)
100개 25개 30개
갤럭시S6
(SM-G920S/K/L)
100개 25개 30개
갤럭시S6 엣지
SM-G925S/K/L)
100개 25개 30개
갤럭시S6 엣지 플러스
SM-G928S/K/L)
100개 25개 30개
갤럭시노트5
SM-N920S/K/L)
100개 25개 30개
갤럭시S7 엣지
SM-G935S/K/L)
100개 25개 30개
갤럭시S7
SM-G930S/K/L)
100개 25개 30개
갤럭시A7(2016)
SM-A710S/K/L)
100개 25개 30개
갤럭시A5(2016)
SM-A510S/K/L)
100개 25개 30개
갤럭시A8
SM-A800S)
100개 - -
갤럭시J7
SM-J700K)
- 25개 -

메시지를 한 번에 여러 명에게 보내는 기능(동보 전송)에 대한 인원 수 제한은 제조사에서 하는 것이 아니라 통신사 요구사항으로 결정되는 부분이다.

블로그 이미지

Link2Me

,
728x90

안드로이드 소스에서 Deprecated 라고 나오는 걸 해결하기 위해 검색으로 찾은 결과를 적어둔다.


보통 deprecate 되어도 이전 코드를 지우는 건 아니기 때문에, 전처럼 동작하기는 할 것이다.

향후, 유지보수단계에서 deprecate 코드에 대해서 안정성을 보장하지 않는다는 얘기이기 때문에, 안드로이드 차기 버전 에서는 비정상 동작을 할 가능성이 높아진다.

대체코드를 찾아서 새롭게 구현하는게 현명한 판단이다.


메모리 누수를 일으키는 현상에 대한 정리가 잘된 자료이다.

http://sjava.net/2016/05/%EB%B2%88%EC%97%AD-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1%EC%9D%B4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%88%84%EC%88%98leak%EB%A5%BC-%EB%A7%8C%EB%93%9C%EB%8A%94-8%EA%B0%80%EC%A7%80/


depricated 로 나온 걸 하나 하나 해결하기 위해 찾은 걸 적어나갈 것이다.


URLDecoder.decode(getIntent().getExtras().getString("url"), "UTF-8");

getSettings().setUserAgent(0);  => getSettings().setUserAgentString("Android");

URLEncoder.encode("","UTF-8")


Implicitly using the default locale is a common source of bugs: Use toUpperCase(Locale) instead    NetworkCheck.java
url = url.toLowerCase();  ==> url = url.toLowerCase(Locale.getDefault());

// http://beginnersbook.com/2013/12/java-string-tolowercase-method-example/


The method decode(String) from the type URLDecoder is deprecated

URLEncoder.encode(String s, String enc);
import java.net.URLEncoder;
URLEncoder.encode("This text must be encoded!", "UTF-8");



AlertDialog: BUTTON_POSITIVE, BUTTON_NEUTRAL and BUTTON_NEGATIVE.


AlertDialog alertDialog = new AlertDialog.Builder(activity).create();
       alertDialog.setTitle("  [ 알림 ]");
       alertDialog.setMessage("등록된 휴대폰 번호가 없습니다.");
       alertDialog.setButton("확인", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) {
           }
       });

AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
        alertDialog.setTitle("  [ 알림 ]")
        .setMessage("등록된 휴대폰 번호가 없습니다.")
        .setCancelable(false)
        .setNegativeButton("확인",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialog.create();
        alert.show();



alertDialog.setButton("확인", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {

   }
});

alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,"확인", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {

   }
});



// http://www.technotalkative.com/issue-using-setjavascriptenabled-can-introduce-xss-vulnerabilities-application-review-carefully/

@SuppressLint("SetJavaScriptEnabled")
public class MyActivity extends Activity
{
...
}


// 내용 파악이 필요한 부분

showDialog(DIALOG_DOWNLOAD_PROGRESS);
The method showDialog(int) from the type Activity is deprecated
https://developer.android.com/reference/android/app/Activity.html#showDialog%28int%29
This method was deprecated in API level 13.


MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);


MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName("UTF-8"));



NameValuePair deprecated
ContentValues values = new ContentValues();
values.put("key1", "value1");
values.put("key2", 123);



블로그 이미지

Link2Me

,
728x90

안드로이드 앱 설치되는 아이콘을 변경하려면 이미지 파일에서 icon.png 파일을 전부 변경해줘야 한다.

drawable-ldpi (120 dpi, Low density screen) - 36px x 36px
drawable-mdpi (160 dpi, Medium density screen) - 48px x 48px
drawable-hdpi (240 dpi, High density screen) - 72px x 72px
drawable-xhdpi (320 dpi, Extra-high density screen) - 96px x 96px
drawable-xxhdpi (480 dpi, Extra-extra-high density screen) - 144px x 144px
drawable-xxxhdpi (640 dpi, Extra-extra-extra-high density screen) - 192px x 192px


사이즈에 맞게 아이콘을 변경해준다.


AndroidManifest.xml 파일에서 지정해준다.

어플 이름은 values/strings.xml 파일에서 지정해준다.



이 다음에 해줄 사항은

기존 이미지가 남아 있을 수 있으니 완전 clear 를 해주어야 한다.

블로그 이미지

Link2Me

,
728x90

안드로이드 개발중에 소스코드등 기타 이상한것이 없는데 자꾸
"Unparsed aapt error(s)! Check the console for output"
다음과 같이 이클립스의 problem창에 에러로그가 남을때 가 있다.


Project -> clean 으로 생성된 중간파일을 삭제하면 된다.


안드로이드 eclipse 에서 소스를 수정해주면 저장을 해야만 변경사항이 반영된다.

C#은 소스를 수정하고 컴파일을 하면 알아서 내용이 자동 변경되는데

안드로이드 eclipse 는 이런 점이 매우 불편하다.

블로그 이미지

Link2Me

,
728x90

소스에 deprecated 라고 나오는 부분이다.



AlertDialog alertDialog = new AlertDialog.Builder(Login.this).create();
    alertDialog.setTitle("네트워크 연결 오류");
    alertDialog.setMessage("사용가능한 무선네트워크가 없습니다.\n" +
                           "먼저 무선네트워크를 확인해 주세요.");
    alertDialog.setCancelable(false);
    alertDialog.setIcon(R.drawable.icon_dialog);
    alertDialog.setButton("확인", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            finish();
            //application 프로세스를 강제 종료
            android.os.Process.killProcess(android.os.Process.myPid() );
                                           
        }
    });
    alertDialog.show();



아래와 같이 수정하면 된다.


AlertDialog.Builder builder = new AlertDialog.Builder(Login.this);
    builder.setTitle("네트워크 연결 오류")
    .setMessage("사용가능한 무선네트워크가 없습니다.\n" +
                "먼저 무선네트워크를 확인해 주세요.")
    .setCancelable(false)
    .setIcon(R.drawable.icon_dialog)
    .setNegativeButton("확인",new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            finish();
            //application 프로세스를 강제 종료
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    });
    AlertDialog alert = builder.create();
    alert.show();




블로그 이미지

Link2Me

,
728x90

MySQLi 로 DB를 접속하는 경우에 로그인이 넘어가지 않는 문제점에 부딪쳤다.


<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/db.info.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/phpclass/dbClass.php';
$conn=new MySQLiDbClass();
$DB_CONNECT = $conn->isConnectDb($DB);

require_once $_SERVER['DOCUMENT_ROOT'].'/phpclass/loginClass.php';
$c=new LoginClass();

$result = $c->MobileUserAuthCheck($loginID,$loginPW,$deviceID);
if($result > 0 ) {
    $_SESSION['userID'] = $loginID;
    $_SESSION['userPW'] = md5($loginPW);
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    $_SESSION['ua'] = $_SERVER['HTTP_USER_AGENT'];
    echo 'Login Success';
} else if($result == '0') {
    echo 'Login Fail';
} else {
    echo 'Phone Dismatch';
}
?>


로그인 함수를 객체를 생성하여 처리하면 화면이 제대로 넘어간다.

그런데 킴스큐에서 제공하는 함수를 이용하면 화면이 넘어가지 않고 에러 메시지를 뿌린다.

<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/db.info.php';
include_once $_SERVER['DOCUMENT_ROOT'].'/function/db.mysql.func.php';
$DB_CONNECT = isConnectDb($DB);

require_once $_SERVER['DOCUMENT_ROOT'].'/phpclass/loginClass.php';
$c=new LoginClass();

$result = $c->MobileUserAuthCheck($loginID,$loginPW,$deviceID);
if($result > 0 ) {
    $_SESSION['userID'] = $loginID;
    $_SESSION['userPW'] = md5($loginPW);
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    $_SESSION['ua'] = $_SERVER['HTTP_USER_AGENT'];
    echo 'Login Success';
} else if($result == '0') {
    echo 'Login Fail';
} else {
    echo 'Phone Dismatch';
}
?>


ViewRootImpl
sendUserActionEvent() mView == null
ViewPostImeInputStage ACTION_DOWN


왜 이런 현상이 발생하는 걸까?

MySQL 접속하는 경우를 테스트해보면 킴스큐RB 함수를 이용해도 아무런 문제없이 잘 넘어간다.

Web 상에서 접속하면 MySQL, MySQLi 모두 정상적으로 접속이 잘 된다.

안드로이드폰(삼성 갤럭시 S4)에서만 발생하는 증상인가?

심지어 로그를 찍어보면 Response : Login Success 라고 정상적으로 접속이 되었다고 나오는데도 불구하고 다음 Activity 로 넘어가질 못한다.


구글링을 해보니

I also encuntered the same in S4. I've tested the app in Galaxy Grand , HTC , Sony Experia but got only in s4. You can ignore it as its not related to your app.

이런 메시지도 나온다.


삼성 갤럭시2로 테스트를 해보니 역시 마찬가지로 메시지를 뿌린다.

MySQLi 를 사용할 경우에는 객체를 생성해서 사용해야 하나 보다.




블로그 이미지

Link2Me

,
728x90

Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 15
메시지가 뿌려지면서 에러를 출력한다.

컴파일 하려고 해도 안된다.


해결책을 찾아서 적어둔다. 대략적으로 표시되어 있어서 이해가 얼른 안되어서 아예 numbering을 하면서 적었다.

먼저 Windows --> Preferences 를 선택하면 아래 그림이 나온다.





이렇게 하고 나서 컴파일을 하면 컴파일이 잘된다.

블로그 이미지

Link2Me

,
728x90

eclipse 에서 Pager 연습을 하려고 하는데 에러가 발생하여 메시지를 보여준다.



대체 이걸 해결하려면 어떻게 해야 하나?


구글링을 했더니 Android Studio 사용할 경우의 것은 찾아냈다.

아직은 Android Studio 를 사용하지 않으니까 이것도 맞는 것인지 잘 모르겠다.


http://stackoverflow.com/questions/16993341/cannot-resolve-symbol-drawerlayout


In android studio go to File-> Project Structure -> Modules -> Dependencies -> + symbol -> Library Dependency.
Now search for support library. you will find something like this com.android.support:support-v13
Now, select Jar file named support-v13 (Whatever the version is) and click OK.


Eclipse 에서 Add  하는 방법을 찾아내려고 열심히 탐색을 했지만 대부분 글씨로 되어 있어서 구글링은 포기하고 네이버 검색을 시도했다.

Android SDK Manager Extras 에서 옵션 체크하면 된다고 하는데 해당 옵션이 없다.



힘들게 찾아냈더니 그림으로 설명된 곳을 하나 발견했다. http://ralf79.tistory.com/373

그림을 참조하여 해봤더니 에러 메시지가 사라졌다.






Android SDK Manager 가 계속 버전업이 되면서 메뉴가 바뀌는 거 같다.

이러다보니 자료를 찾아내도 내가 원하는 해결책이 안될 수도 있다는 거....


MAC OS 버전에 대한 자료가 나온 곳인데 https://developer.android.com/studio/intro/update.html

나중에 MAC 버전에서 맞는지 확인하고 필요시 업데이트 해야겠다.


블로그 이미지

Link2Me

,
728x90

eclipse 에서 안드로이드 컴파일 버전이 변경되어야 하는데 변경이 안된다.


아래 그림처럼 하면 변경하는 체크박스가 활성화되는데 설치가 잘못된 것인지 변경할 수가 없다.




checkbox 가 없어서 변경을 할 수가 없다.


테스트하는 폰에 설치한 안드로이드 버전은 5.0.1 까지 지원한다. 4.4.2 에서 OS를 업데이트 했더니 5.0.1 로 변경되었다.

Android 6.0 으로 컴파일을 해서 폰에서 확인하니까 바로 앱이 중지되어 버린다.

변경하는 방법이 없을까 고민하다가 혹시나 하고 project.properties 파일의 내용에서 숫자를 변경하고 저장한 다음에 종료하고 다시 읽어들이기를 했더니 아래 그림처럼 Anroid 4.0.3 으로 변경되었다.




Android 6.0 또는 Anroid 4.0.3 둘다 선택해서 컴파일을 다시 해봤다.

앱이 중지되는 원인은 코드에 참조가 잘못되어서 발생하는 현상이었다.


Visual Studio 2015 에서는 버튼을 생성할 때 Double-Click 을 하면 자동으로 연결되는 event 가 생성되는데 eclipse 안드로이드에서는 버튼 연결의 코드가 자동으로 생성되지 않고 수동 생성해야 한다.

아무튼 원인은 다른 곳에 있었지만, target=android-15 를 수동 변경하는 방법을 해본 것에 의의를 두고 싶다.



블로그 이미지

Link2Me

,
728x90

Windows 10 에서 악성코드가 있다면서 치료하겠나고 해서 치료하겠다고 했더니 그 후에 eclipse 동작이 제대로 안된다. ㅠㅠㅠ 망할 windows 10


그래서 eclipse 를 완전히 새로 설치하겠다고 마음먹고 기존 폴더 전체를 지우고 다시 설치했더니 ADT 설치까지는 잘 된다.


그런데 SDK 인식을 못한다. could not find folder tools inside sdk

폴더 경로를 지정해줘도 안된다.


구글링을 했더니 내가 아는 내용으로만 답변이 나온다.

다시 네이버 블로그 검색을 했더니 구글링 했을 경우와 별반 다른게 없다.

네이버지식인에 답변이 올라온 것을 보고 연결된 블로그를 찾아갔더니 경로설정 부분을 한다고 했던 것이 좀 빠진게 있었다.


http://blog.naver.com/theparanbi/80153328747


정말 정성들여 작성한 흔적이 느껴진다. 아울러 네이버의 쓰레기 검색기준에 대해서도 성토하고 있다.

네이버는 회사이기 때문에 이익을 반영하는 형태로 검색을 하고 있다는 걸 그냥 받아들이지 않으면 나만 피곤해진다.

네이버에서 저품 블로그 현상 겪고 나서 네이버 블로그는 버리고 이곳 티스트리 블로그로 옮겼다.


아무튼 이분 덕분에 SDK 다시 설치하게 되었다.


1. 환경설정 Path 경로 설정이 정말 중요하다.

    컴파일 할때에도 설치된 jdk 를 찾아서 컴파일을 한다.

   SDK 설치할 때에도 환경설정 정보를 제대로 잡아줘야 된다는 거 알았다.

   최초 설치가 아니라 재설치하는 경우라서 그런지 더 중요하다. 




에러 메시지 반복으로 설치, 삭제, 다시 설치를 몇번이나 했는지 모른다.

집에서 설치하는 경우와 회사에서 설치하는 경우 동일한 거 같은데 동작이 집에서는 되는데 회사에서는 안되는 경우도 겪으면서 왜 그런가 하는 의구심만 가지고 .....


windows 10 이 자동 업데이트를 하더니 windows.old 라는 폴더를 만들고 16G 정도 공간을 차지하고 있다.

이러면서 기존 PATH 정보 일부가 빠진건가 하는 의구심도 가져보기도 하고...


아무튼 제대로 모른 상태에서 대략 프로그램 설치하니까 공부 좀 하라고 그러나 보다 생각하련다.

블로그 이미지

Link2Me

,
728x90

안드로이드 개발 배워야 되어서 동영상 강좌 열심히 듣고 있다.


코드에 에러가 생기면

Ctrl + Shift + O 키르를 누르라고 나온다.

누르니까 자동으로 코드가 한줄 import 로 추가된다.


eclipse 프로그램 정말 잘 만들었다는 걸 알게 되었다.

윈도우에서 맨날 EditPlus 로 PHP 코딩만 약간 해서 eclipse 를 사용할 일이 없어서 사용을 안했었는데 정말 잘 만들었다는 걸 동영상 강좌를 들으면서 새삼 감탄하고 있다.

블로그 이미지

Link2Me

,
728x90

기존 프로젝트를 받아서 Import 를 해보니 그래픽(Layout)이 인식이 안된다.

기존 프로젝트는 eclipse 버전이 낮은 상태에서 컴파일을 했고 새로 설치한 eclipse 는 버전이 좀 더 높아서 그런가보다.


Layout 에 있는 파일을 실행했더니

This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in

메시지가 뜬다.

구글링을 했더니

  1. Click Help > Install New Software.
  2. In the Work with field, enter: https://dl-ssl.google.com/android/eclipse/
  3. Select Developer Tools / Android Development Tools.
  4. Click Next and complete the wizard.

로 해결책을 제시하는데 설치된 SDK 버전이 더 높은 버전으로 이미 설치가 되어 있는 상태라 이런 방법은 해결책이 안된다.


정답을 모르니까 일단 적어둔다.

아래 방법처럼 해서 해결은 되었다. 그런데 정확한 해결책이 뭔지를 모르겠다.



SDK에 설치된 항목에 따라서 인식이 안될 수도 있어서 화면을 캡쳐해둔다.



하디보니 이걸 설정해줘야 하는 경우도 있는거 같아서 적어둔다.



그런데 왜 체크박스가 안보이는지 모르겠다..

블로그 이미지

Link2Me

,