Manifest의 activity 속성에 추가

android:windowSoftInputMode="adjustResize|adjustPan"


android:windowSoftInputMode="설정값"


설정 값 :

stateUnspecified     

: 키보드의 디폴트 설정 값

stateUnchanged      

: 키보드의 마지막 상태로 유지

stateHidden            

: 사용자 액티비티 선택 시 키보드 숨김

stateAlwaysHidden 

: 액티비티의 메인 윈도우가 입력 포커스를 가질 때 키보드는 항상 숨김

stateVisible 

: 사용자가 액티비티 메인 윈도우 앞으로 갈 때 키보드 보여짐

stateAlwayVisible 

: 사용자가 액티비티를 선택할 때 키보드를 보여줌

adjustUnspecified 

: 스크롤 할 수 있는 레이아웃 화면을 가지고 있다면 윈도우 크기 재 조정, 메인 윈도우의 디폴트 값

adjustResize 

: 스크린에 키보드 공간을 만들기 위해 메인 윈도우 크기를 재 조정

adjustPan 

: 키보드 공간을 만들기 위해 메인 윈도우의 크기가 재조정 되지 않음

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

개발자 기들이기 인지? 소비자 길드리기 인지? 

아니면, 두가지 모두인지 모르겠지만, 구글 안드로이드는 끝없이 변화를 시키고 있고, 개발자 입장에서는 이러한 부분이 여간 껄끄러운게 사실이다.

특정 사람들은 운영체제 완성도고 높아진다고 하지만 완성도면에선느 아직 갈길이 멀다는게 필자의 입장이다.

아직도 구글 내부 코드 상의 문제 혹은 불안정한 부분이 많이 존재하고 있기 때문이다.

최근에는 구글 차량용 OS의 런처를 변경하기 못하게 막은 것이 보도된 적이 있었다.

즉, Open Source를 기반으로한 부분적 폐쇠적인 정책을 조금씩 넓혀하고 있는 것이다.


  


이번에는 또 멀 바꿨는지 보자. 

우선 이는 구글이 발표한 내용을 바탕으로 기입하는 것이며, 간단히 UI를 살펴본 것이 다라서 정확하지 않거나 개인적인 의견이 반영되는 것을 밝힌다.


1. 앱 설치 속도 및 성능 향상

JIT(Just It Time) 컴파일러를 ART(안드로이드 런타임)에 추가해 안드로이드 6.0 마시멜로 대비 

앱 설치 속도를 75%

앱 실행 속도 및 성능을 1.5~3배

향상 시켰다고 한다. 


2. Java 1.8 지원

기존에는 자바 1.7을 지원해서 개발에 불편한 부분이 많았다.

이번 버전부터는 자바 1.8을 지원하여, 오픈GL 3.2를 적용하여 앱을 개발하는 것이 수월해 질 것으로 판단됩니다.


3. 게임 그래픽 향상

벌칸(Vulkan)이라는 3D 그래픽 API를 적용하였다고 한다.

OpenGL처럼 Vulkan은 게임이나 상호작용성 미디어와 같은 고성능 실시간 3D 그래픽스 어플리케이션을 모든 플랫폼에서 고성능으로 CPU를 적게 사용하도록 개발하는 것을 목표로 만들어진 API이며 마이크로소프트의 Direct3D 12, 애플의 메탈, AMD의 맨틀과 같은 성격의 API이다. CPU 사용량에 대해서 더 이야기 하자면 Vulkan은 멀티 코어 CPU의 여러 코어 사이에 로드를 더 잘 분배할 수 있다.

참고 : https://ko.wikipedia.org/wiki/%EB%B2%8C%EC%BB%A8_(API)


4. 멀티태스킹 기능 강화

스마트 폰의 경우 최대 2개

태블릿의 경우 최대 4개

까지 멀티태스킹이 기본 지원이 된다고 한다.

또한 각 태스크간 화면 전환이 빨라진다고 하는데,,,, 우선 안해봤고,,,, 깔리 어플도 얼마 없어서 정확한 확인이 되지 않는다.



5. 화면 크기 조정

기존 대비 화면 크길 조정이 훨씬 편해졌다.


 


6. 가상현실 플랫폼 '데이드림' 지원

데이드림용 헤드셋을 안드로이드 폰에 연결하면, 스마트폰 화면에 가상현실용 사용자 환경이 나타난다고 한다.

하지만, 헤드셋이 없어서;;;확인이;;;^^;;;


7. 향상된 전력 관리 기능

스마트폰을 사용하지 않는 경우 전력 소모를 줄여주는 '도즈(Doze)' 기능도 향상 시켰다고 한다.

전력 소모량이 많은 앱을 강제로 일시 정지시킨다.

이 기능의 유용함은 적어도 한달 이상은 사용해봐야 느낄 수 있을 것으로 판단된다.


8. 향상 된 알림 기능

이전보다 훨씬 간결하면서도, 더 많은 정보가 Simple하게 알림창에서 확인이 된다.

또한, 문자의 경우 알림창에서 바로 답장을 하는 기능도 추가되었다.

또한, 설정에서는 각 어플별로 알림 기능을 개별적으로 설정하는 것도 가능하다.

잠금화면에서 보여주는 알림 또한 향상되었다.


  

  

  


9. 데이터 절약 기능 추가

무선 환경에서 자동으로 동기화 기능이 정지되거나, 고해상도 화면은 클릭을 해야 다운로드하여 화면에 보여주는 등의 기능이 추가되었다고 한다.

무제한 요금제를 쓰는 나로써는 그닥이지만,,, 

2GB 뿐인 부모님께는 유용한 기능이 되지 않을까 싶다.


10. 인스턴트 앱 기능 추가

요건이 가장 마음에 드는 기능이다.

앱을 설치하지 않아도 앱의 기능 일부를 이용할 수 있는 기능이기 때문이다.

하지만, 아직 해보지 않아서, 기대에 부응할련지는 모르겠다.


11. 심리스 업데이트 기능 추가

기존 소프트웨어 업데이트를 하면, 파일을 다운로드하고 재부팅 후 바이너리가 업데이가 완료 될 때까지 기다려야만 했다.

하지만, 심리스 업데이트 기능은 사용자가 인식하지 못하는 사이에 업데이트가 이루어 지는 기능이라고 한다.


12. 폴더 잠금 기능 추가

보안에 취약한 안드로이드 기능을 보완하기 위한 목적 중의 하나로, 개별 폴더를 암호화 할 수 있는 기능을 선보였다.


13. 향상 된 알림 기능 향상

기존 암호를 걸었음에도 문자 내용등이 보이는 문제가 있었다. 

물론, 마시멜로우 부터 기능이 들어가기는 했지만, 이번에 이를 좀 더 강화했다고 한다.


14. 시력 보호 기능 추가

시력 보호를 위한 고대비 나이트 비전 모드가 추가 되었다.

이는 화면 캡쳐를 해도 기능이 구동 모습이 찍히지 않아서 말았다... 귀찮아서;;;;

암튼, 이 기능이 활성화 되면, 눈을 피로하게 하는 블루라이트를 제거하게 된다.

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret
//show webapp:

Uri uri = Uri.parse("http://www.google.com");
Intent it  = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);

//show maps:
Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it); 

//show ways
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity(it);

//call dial program
Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);  
startActivity(it);  

Uri uri = Uri.parse("tel.xxxxxx");
Intent it =new Intent(Intent.ACTION_CALL,uri);
//don't forget add this config:<uses-permission id="android.permission.CALL_PHONE" />

//send sms/mms
//call sender program
Intent it = new Intent(Intent.ACTION_VIEW);   
it.putExtra("sms_body", "The SMS text");   
it.setType("vnd.android-dir/mms-sms");   
startActivity(it);  

//send sms
Uri uri = Uri.parse("smsto:0800000123");   
Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
it.putExtra("sms_body", "The SMS text");   
startActivity(it);  

//send mms
Uri uri = Uri.parse("content://media/external/images/media/23");   
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra("sms_body", "some text");   
it.putExtra(Intent.EXTRA_STREAM, uri);   
it.setType("image/png");   
startActivity(it); 

//send email
 
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);

Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   
it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
it.setType("text/plain");   
startActivity(Intent.createChooser(it, "Choose Email Client"));  

Intent it=new Intent(Intent.ACTION_SEND);     
String[] tos={"me@abc.com"};     
String[] ccs={"you@abc.com"};     
it.putExtra(Intent.EXTRA_EMAIL, tos);     
it.putExtra(Intent.EXTRA_CC, ccs);     
it.putExtra(Intent.EXTRA_TEXT, "The email body text");     
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");     
it.setType("message/rfc822");     
startActivity(Intent.createChooser(it, "Choose Email Client"));   


//add extra
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
sendIntent.setType("audio/mp3");   
startActivity(Intent.createChooser(it, "Choose Email Client"));

//play media
Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");   
Intent it = new Intent(Intent.ACTION_VIEW, uri);   
startActivity(it);  

//Uninstall
Uri uri = Uri.fromParts("package", strPackageName, null);   
Intent it = new Intent(Intent.ACTION_DELETE, uri);   
startActivity(it);

//uninstall apk
Uri uninstallUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

//install apk
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

//play audio
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt = new Intent(Intent.ACTION_VIEW, playUri);

//send extra
Intent it = new Intent(Intent.ACTION_SEND);  
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");  
sendIntent.setType("audio/mp3");  
startActivity(Intent.createChooser(it, "Choose Email Client"));

//search
Uri uri = Uri.parse("market://search?q=pname:pkg_name");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);  
//where pkg_name is the full package path for an application  

//show program detail page
Uri uri = Uri.parse("market://details?id=app_id");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);  
//where app_id is the application ID, find the ID  
//by clicking on your application on Market home  
//page, and notice the ID from the address bar


//search google
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);


https://snipt.net/Martin/tag/android/
저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

http://www.kakao.com/services/api/story_link


텍스트 / URL 포스팅

Custom URL Scheme

storylink://posting?post=[post]&appid=[appid]&appver=[appver]&apiver=[apiver]&appname=[appname]&urlinfo= [urlinfo]

파라미터 설명
urlinfo 설명

안드로이드 OS 공유기능 활용

위 방법 외에도 안드로이드에서 제공하는 공유 기능을 활용하여 텍스트/url, 이미지를 포스팅할 수 있습니다.
구체적인 정의는 http://developer.android.com/reference/android/content/Intent.html#ACTION_SEND를 참조하세요.

사용예

// Image를 전송할 때 
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("image/png"); 
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path)); 

// Kakao Story로 바로 보내시려면 아래 코드를 추가합니다. 
intent.setPackage("com.kakao.story");

다운로드

개발자용 카카오톡 B.I 다운로드: kakaostory_icon_guide.zip

*B.I는 스토리링크를 이용하여 카카오스토리로 포스팅하는 기능을 안내하는 버튼/페이지에 한하여 사용하셔야 하며, 
다른 페이지나 메뉴 등에서 위 이미지를 그대로 또는 일부 변형하여 사용자가 카카오 제작 앱으로 혼동하게 하시면 안됩니다.

개발자용 소스코드 다운로드: https://github.com/kakao/kakaolink-android


저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

Android Application에서 또는 기타 Application에서 블로그에 글쓰기, 수정, 삭제, 댓글 등의 작업을 하기 위해서는 MetaWebBlog를 이용하여야 합니다.

티스토리, 네이버 등에서 사용 할 수 있는 BlogAPI의 표준 명칭은 RFC:  MetaWeblog API (MWA) 이며,

MetaWeblog API 는 외부프로그램을 이용하여 블로그에 게시물을 올리거나 편집을 할 수 있게 하는 프로그래밍 인터페이스로 클라이언트 프로그램과 웹 로그(티스토리 같은 블로그) 서버간 통신방식은 XML-RPC 프로토콜을 사용합니다.

MetaWeBlog xmlrpc기반으로 되어있어 웹 인터페이스가 없어도 구현이 가능하다고 합니다. 

우리나라 거의 모든 블로그들이 MetaWeBlog형식을 취하고있어 일단 블로그들 중에 국내에서 가장 많이 쓰이는 네이버, 티스토리가 가능하다는 사실을 확인!!!

특히 티스토리, 네이버 등에서 구현해서 해보니 잘 되는 것을 확인 확인하였으며, XMLRPC 는 아래 첨부 파일을 사용하면 됩니다.


org.zip



시작전에 해야될 작업

try {
xmlrpcConfig.setServerURL(new URL(지원되는 API주소 적용));
//예 네이버 같은 경우 https://api.blog.naver.com/xmlrpc 로 저장 된다.
client.setConfig(xmlrpcConfig);
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: " + ex.getMessage());
}

최신 글 가져 오는 방법
Object[] cats = new Object[] {};
try {
cats = (Object[]) this.client.execute("metaWeblog.getRecentPosts", 
new Object[] {this.blogid, this.username, this.password, 3});
//blogid : ID, username : 대부분 ID와 동일, password : API키값, 가져올 게시글 수(int형, 나머진 String형)
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR: " + e.getMessage());
}

※ 리턴값은 api 상 struct 형태로 리턴되지만, Hashtable형태로 되어있다. 분해 방법은 여럿이지만 난 HashMap형태로 바꿔서 사용하였다.
예문
for (int i = 0; i < cats.length; i++) {
HashMap category = (HashMap) cats[i];
System.out.println((String)category.get("title")); //타이틀 부분 가져오기
}

카테고리 가져 오는 방법
public Object[] GetCategories() {
Object[] cats = new Object[] {};
try {
cats = (Object[]) this.client.execute("metaWeblog.getCategories",
new Object[] { this.blogid, this.username, this.password }); 
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR: " + e.getMessage());
}
}

리턴되는 값은 최근글 가져오기와 동일

글작성 방법
public void PostIt(String title, String description, String category) {
Hashtable post = new Hashtable();
if (title != null)
post.put("title", title); //제목 String형
post.put("dateCreated", new Date()); //날짜
post.put("description", description); //내용 String형
post.put("tags", "test"); //태그 넣기
post.put("categories", "test"); //원하는 카테고리로 넣기

//각 블로그API에서 지원 형태는 조금 다를 수 있다. 그건 원하는 블로그 API사이트를 참고하자, 이 형태는 네이버 블로그 형태이다.

Hashtable categories = new Hashtable();

String blogpostid = ""; //작성된 포스트 아이디 로 리턴 받음
Boolean result = Boolean.TRUE; //공개 비공개 여부 단 공개된 카테고리안에서만 해당됨

try {
blogpostid = (String) this.client.execute("metaWeblog.newPost",
new Object[] { this.blogid, this.username, this.password,
post, result });
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: " + ex.getMessage());
}
}


  • metaWeblog.editPost (postid, username, password, struct, publish) returns true
  • metaWeblog.getPost (postid, username, password) returns struct
  • metaWeblog.newMediaObject (blogid, username, password, struct) returns struct

  • 위 3가지 방법은 패스 하도록 한다.

    참고사이트 : 
    http://www.ibm.com/developerworks/kr/library/x-voicexml3/
    http://egloos.zum.com/Charko/v/161806
    http://docworlds.tistory.com/entry/Android%EC%97%90%EC%84%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8-Application-%EC%A0%9C%EC%9E%91-0


    저작자 표시 비영리 변경 금지
    신고

    WRITTEN BY
    빅터크룸
    머 먹고 사냐.....

    받은 트랙백이 없고 , 댓글이 없습니다.
    secret