'Programming/Android'에 해당되는 글 68건

  1. 2011.11.07 Android - Disable orientation change / 가로, 세로 변경시 초기화 해제
  2. 2011.11.04 Android - Video loading dialog in VideoView / VideoView 로딩되기 전 로딩 다이얼로그 생성
  3. 2011.10.25 Android - Page loading dialog in Webview //웹뷰에서 페이지 로딩 다이얼로그 만들기
  4. 2011.10.24 Android - viewing PDF file in webview
  5. 2011.10.24 Android - Message에 Stirng 데이터 담아 핸들러에 sendMessage 하기 (2)
  6. 2011.10.20 Android - taking a phone screenshot from a computer / 폰화면 컴퓨터에서 스크린샷 찍기
  7. 2011.10.17 Android - Unzip
  8. 2011.10.17 Android - Down file using FTP/FTP방식으로 파일 다운
  9. 2011.10.17 Android - Down file using http/http방식으로 파일 다운
  10. 2011.10.17 Android - Methods GET and POST in HTML forms//http전송 get방식, post방식
  11. 2011.10.17 Android - keyboard setting for when layout is hidden by keyboard popup / EditText 클릭시 UI 같이 올라가는 문제
  12. 2011.10.12 Android - custom button pressed image change
  13. 2011.10.11 Android - Custom Toast
  14. 2011.10.07 Android - Publish Application to Market
  15. 2011.10.05 Android - WebView Debuging /get webview error code
  16. 2011.10.05 Android - Custom Swipe-Fling Scroll View / like home screen view
  17. 2011.10.05 Android - Custom Dialog Set Root Background
  18. 2011.10.05 Android - Custom CheckBox
  19. 2011.10.05 Android - Custom RadioButton
  20. 2011.10.05 Android - Custom Dialog onClick Event
  21. 2011.10.05 Android - custom indeterminate progressbar
  22. 2011.07.28 Android - Activity for result /자신을 호출한 엑티비티에게 데이터 보내기
  23. 2011.07.20 Android - Convert Raw file to OutStream / raw파일 outputstream으로 변경
  24. 2011.07.19 Android - Download file for HTTP / HTTP로 파일다운받기
  25. 2011.06.15 Android - plugging Aptana in eclipe / 이클립스에서 aptana 사용하기
  26. 2011.06.15 Android - to use json[JSONArray,JSONObject](example) /안드로이드에서 json 사용하기
  27. 2011.06.15 Android - set pinch zoom in webview / 웹뷰에서 핀치 줌 설정
  28. 2011.06.14 Android - Resourece path / 리소스 경로
  29. 2011.06.14 Android - read & write ini(properties) in android SDcard/ 안드로이드에서 ini(properties) 사용하기
  30. 2011.06.13 Android - cmd로 수동 apk 생성(예제)/To build apk from the command line(Example)/자동배포
posted by Solver Full-stack Developer 2011.11.07 18:22
<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation">

 

안녕하세요 ^^

잠깐 설명을 해볼까 해요.

폰에서 화면전환시 Activity가 계속 초기화되는 문제를 해결하기위해서 AndroidManifest.xml에서

해당 Activity에 위에 노랑색부분처럼 설정을 해줘야 가로, 세로 전환할때 초기화가 안됩니다.

위에 노랜색부분처럼 설정을 안해주신다면 ->(가로세로 전환한 시점) 

 onCreate -> onCreate -> onCreate ... 이겠죠?

설정을 해주시면

onCreate-> onConfigurationChanged -> onConfigurationChanged ->...


와같은 식으로 동작합니다.

도움되셨으면 좋겟네요 ㅎ

Enjoy coding, Don't be angry :)
 

신고
posted by Solver Full-stack Developer 2011.11.04 14:16
Step 1. SetOnPreparedListener

public class SampleVideo extends Activity {
VideoLoding dlg;
VideoView vv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videopage);
Intent i = getIntent();
if(dlg==null){
dlg = new VideoLoding(this,true);
dlg.show();
}
vv = (VideoView)findViewById(R.id.video);
        MediaController mc =  new MediaController(this);
        vv.setVideoURI(Uri.parse(i.getStringExtra("url")));
        vv.setMediaController(mc);
        vv.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer arg0) {
                if(dlg!=null && dlg.isShowing()){
        dlg.dismiss();
        dlg=null;
        }
            }
        });
        vv.start();
}

}

Do u wanna custom indeterminate progressbar?

here is http://codedb.tistory.com/entry/Android-custom-indeterminate-progressbar


안녕하세요 ^^

설명을 잠시 해보겠습니다.

VideoView를 start하기전에 로딩 다이얼로그를 show()해주세요.
그리고 setOnPreparedListener을 설정해주시고 로딩 다이얼로그를 dismiss()해주세요.

즉 play준비가 다되었을때 다이얼로그를 종료한다는 이야기죠.

혹시 커스텀 로딩 다일로그가 필요하세요? 아래링크로 가세요!

http://codedb.tistory.com/entry/Android-custom-indeterminate-progressbar

도움이 되었으면 좋겠네요 ㅎ

즐코딩! 낫빡침! 


신고
posted by Solver Full-stack Developer 2011.10.25 09:57
Step 1. Set WebviewClient
 

Webview child = new Webview(this);

...

child.setWebViewClient(new CWebViewClient(this));

Step 2. Using PageLoding Dialog

 public class CWebViewClient extends WebViewClient {
CWebviewLoding dlg;
Context ctx;
public CWebViewClient(Context ctx) {
this.ctx=ctx;
}

@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

@Override
public void onPageFinished(WebView view, String url) {
if(dlg!=null && dlg.isShowing()){
dlg.dismiss();
dlg=null;
}
super.onPageFinished(view, url);
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if(dlg==null){
dlg = new CWebviewLoding(ctx);
dlg.show();
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if(dlg!=null && dlg.isShowing()){
dlg.dismiss();
dlg=null;
}
super.onReceivedError(view, errorCode, description, failingUrl);
}
}

Do u wanna  custom indeterminate progressbar?
 
here is  http://codedb.tistory.com/entry/Android-custom-indeterminate-progressbar

 

안녕하세요 ^^
설명을 조금 해보겠습니다. ㅎ
웹뷰에 페이지로딩할때 페이지로딩 시작,마침 시점에 다이얼로그를 삽입해
사용자에게 '아 먼가 돌아가고 있나보군!' 이라는 생각이 들게 만들려고 만든건데요

웹뷰에 setWebViewClient으로 Webviewclient를 세팅해주셔야해요.
그러려면 WebViewClient를 만들어야겠죠?

step2에서 보듯이 만드시면되요 잘보시면 dlg라고 커스텀한 다이얼로그가 있는데요
웹뷰 페이지로딩 시작과 종료시점에 show, dismiss를 해주시면 페이지가 로딩될때
잘 동작하겠죠 혹여나 error가 날때를 대비해서 에러나면 dismiss해주는것도 좋을듯
싶어요.

혹시 가운데 동글동글 돌아가는 다이얼로그가 필요하시나요?
아래 경로로가시면 커스텀한 다이얼로그 예제가 있답니닷!!
http://codedb.tistory.com/entry/Android-custom-indeterminate-progressbar

많은 도움이 되셨기를 빕니다.

즐코딩! 낫빡침!
 

신고
posted by Solver Full-stack Developer 2011.10.24 19:20
Step 1. Add permission

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

Step 2. Using google viewer

        WebView webview = (WebView)findViewById(R.id.videoView1);
        webview.getSettings().setJavaScriptEnabled(true); 
        String pdf = "http://www.xxx.xxx/xxx.pdf";
        webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);


안녕하세요 ^^
설명을 좀 해볼께요.

우선 인터넷을 사용하니까 permission을 주어야겠죠? Step1처럼 말이죠 ㅎ

그다음은 구글에서 제공하는 pdf뷰어를 사용하는거에요 이걸 이용하면
따로 pdf뷰어를 설치하지 않아도 pdf파일을 볼수가 있죠 ㅎ

Step2와같이 pdf경로를 넣어주시면 됩니다.

도움되셧길 빌계요 ㅎ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.24 19:01
1.send
                Bundle data = new Bundle();
data.putString("data", "I am famous");
msg.setData(data);
commanderHdr.sendMessage(msg); 

2.get
                 Handler commanderHdr = new Handler(){
public void handleMessage(Message msg){
String mylogo = msg.getData().getString("data");
}
};


안녕하세요 ^^
설명을 조금 해보겠습니다 ㅎ

 보내는 부분에서  Bundle을 이용해서 String데이터를 비롯해 넣어주싶은 모든 타입의
데이터를 넣어주세요 putXXX 이런식으로요 ㅎ
그다음 Message변수에 setData로 Bundle을 장착!
그다음 sendMessage로 메시지를 전송하면됩니다.ㅎ

 받는부분에서는 Message에 getData로 데이터를 get해봐서 데이터를 사용하는것입니다.
뭐 예제 2.get을 보시면 금방 눈치 채셨겠지만 말이죠?

도움되셨길 바랍니다 ㅋ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.20 11:45
Step 1. Find ddms.bat
-u r AndoridSDK dir/tools/ddms.bat


Step 2. Click u r Device



Step 3. Click Screen Capture...



Step 4. Use this! 




 

안녕하세요 ^^

설명을 조금 해볼까 합니다 ㅎ
보통 폰으로 개발하는게 훨신 빠르잖아요? ㅎ 그럼 폰으로 스크린샷을 찍을일이 종종 있는데
이때 달빅 디버그 모니터를 이용합니다.

제가 아는 방법으로는 Android SDK설치하실때 경로 있죠?
거기에 찾아들어가보시면 tools라는 폴더가있어요 들어가시면
ddms.bat파일이 있습니다. 실행하시면 끗! ㅋ

실행하고 스크린샷찍으실 디바이스를 클릭하신 후 상단 메뉴바에 Device를 클릭하시면
스크린캡쳐가 반갑게 적혀있죠 ㅎ

도움이 되셨길 바랍니다!

즐코딩! 낫빡침! 

신고
posted by Solver Full-stack Developer 2011.10.17 17:37
 package com.xxx.xxx;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;


public class CUnzip {
final static int BUFFER_SIZE = 1024 * 1000;
public boolean UnzipStart(String fname ){
File zipFile = new File("/sdcard/urdir/filename.ZIP") ;
File targetDir = new File("/sdcard/dir/");
try {
return unzip(zipFile,targetDir);
} catch (Exception e) {

return false;
}
}
private boolean unzip(File zipFile, File targetDir) {
        FileInputStream fis = null;
        ZipInputStream zis = null;
        ZipEntry zentry = null;

        try {
try {

fis = new FileInputStream(zipFile);
zis = new ZipInputStream(fis);

while ((zentry = zis.getNextEntry()) != null) {
String fileNameToUnzip = zentry.getName(); 

File targetFile = new File(targetDir, fileNameToUnzip);

if (zentry.isDirectory()) {//if is Directory
File path = new File(targetFile.getAbsolutePath());
if (!path.isDirectory()) {
path.mkdirs();
}
} else { //if is File 
File path = new File(targetFile.getParent());
if (!path.isDirectory()) {
path.mkdirs();
}
unzipEntry(zis, targetFile);
}
}
} finally {
if (zis != null) {
zis.close();
}
if (fis != null) {
fis.close();
}
}
} catch (Exception e) {
return false;
}
return true;
    }
    private static File unzipEntry(ZipInputStream zis, File targetFile) throws Exception {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(targetFile);

            byte[] buffer = new byte[BUFFER_SIZE];
            int len = 0;
            while ((len = zis.read(buffer)) != -1) {
            if(len == 0){
            return null;
            }
                fos.write(buffer, 0, len);
            }
        } finally {
            if (fos != null) {
                fos.close();
            }
        }
        return targetFile;
    }
}

신고
posted by Solver Full-stack Developer 2011.10.17 17:27
Step 1. Add externer archives...
-u r project -> Rclick -> build path ->add externer archives... 


Step 2. Source
package com.xxx.xxx;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

import android.util.Log;


public class FTPUtill {
String SERVERIP = "127.0.0.1";
int PORT = 21;
String SERVERID = "u r id";
String SERVERPW = "u r pw";
    FTPClient ftpClient=null;

boolean DownloadContents(String filename){
this.ftpClient = new FTPClient();
        connect();
login(SERVERID,SERVERPW);
  cd("Root/xxx");//input u r directory
  FTPFile[] files = list();
  if(files==null){
  return false;
  }
  ArrayList<String> ImageIds_tmp = new ArrayList<String>();
  for(int i =0 ;i<files.length;i++){
String fileName = files[i].getName();
            String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
            long size = files[i].getSize();
            extension=extension.toUpperCase();            
if (size > 0) {
for(int j=0;j<size;j++){
if(filename.equalsIgnoreCase(fileName.substring(0, fileName.indexOf(".")))){
StringBuffer furl = new StringBuffer("/sdcard/xxx/");
furl.append(fileName);
ImageIds_tmp.add(furl.toString());
get(fileName, fileName);
}
}
}         
logout();
        disconnect();
        return true;
}
    public boolean login(String user, String password) {
        try {
            this.connect();
            return this.ftpClient.login(user, password);
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return false;
    }

    private boolean logout() {
        try {
            return this.ftpClient.logout();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return false;
    }

    public void connect() {
        try {
        this.ftpClient.connect(SERVERIP, PORT);
            int reply;
            reply = this.ftpClient.getReplyCode();
            if(!FTPReply.isPositiveCompletion(reply)) {
            this.ftpClient.disconnect();
            }
        }
        catch (IOException ioe) {
            if(this.ftpClient.isConnected()) {
                try {
                this.ftpClient.disconnect();
                } catch(IOException f) {;}
            }
        } 
    }

    public FTPFile[] list() {
        FTPFile[] files = null;
        try {
            files = this.ftpClient.listFiles();
            return files;
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return null;
    }

    public File get(String source, String target) {
        OutputStream output = null;
        try {
        StringBuffer furl = new StringBuffer("/sdcard/xxx/");
        File path = new File(furl.toString());
            if(! path.isDirectory()) {
                    path.mkdirs();
              }
            
            furl.append(target);
            File local = new File(furl.toString());
            if(local.isFile()){
            return null;
            }
            output = new FileOutputStream(local);
        }
        catch (FileNotFoundException fnfe) {;}
        File file = new File(source);
        try {
            if (this.ftpClient.retrieveFile(source, output)) {
                return file;
            }
        }
        catch (IOException ioe) {;}
        return null;
    }

    public void cd(String path) {
        try {
        this.ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        this.ftpClient.enterLocalPassiveMode();
        this.ftpClient.changeWorkingDirectory(path);
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    private void disconnect() {
        try {
        this.ftpClient.disconnect();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

안녕하세요 ^^ 
잠시 설명을 약간 해볼까해요.
전 아파치에서 제공하는 FTP를 사용하였는데요.
위에 소스를 잘 분석하시면 사용방법은 간단합니다.
서버 ip 사용자 id, pw, port를 설정해주시고
맨위쪽에 DownloadContents부분을 하나씩 차근차근 디버깅하시면서 
보시면 이해가 되실꺼에요.
접속하고 디렉토리로 이동하고 파일리스트 가져와 내가원하는 파일 찾아서 다운로드!!

그럼 빠른 업무효율을 위해 DownloadContents ctlr+f ㄱㄱ싱

도움이 되셨길 빌께요 ^^

즐코딩! 낫빡침! 

신고
posted by Solver Full-stack Developer 2011.10.17 16:51
void downloadData(String addr){
StringBuilder html = new StringBuilder();
try{
URL url = new URL(addr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
File book=new File("/sdcard/filedir", "filename.dat");
       FileOutputStream fileOutput = new FileOutputStream(book);
       InputStream inputStream = conn.getInputStream();
       int downloadedSize = 0;
       byte[] buffer = new byte[1024];
       int bufferLength = 0; 
       while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
               fileOutput.write(buffer, 0, bufferLength);
               downloadedSize += bufferLength;
       }
       fileOutput.close();
}
}
}catch(Exception ex){;}
}

안녕하세요 ^^
잠시 설명을 해볼까 합니다ㅎ

파일다운받을때 http방식으로 다운받는 로직인데요.
addr에 파일 풀경로를 넣어주시고
노란색으로 표시된부분에 다운받을실 경로와 파일명을 기입해주시면
끗!

도움이 되셨길 빌어요 ^^
즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.17 16:32
1.Get 방식
example)

{
...
String result = sendData("http://xxx.xxx.xxx/xxx.asp?title=leeminjung&type=article");
...
}

private static String sendData(String addr){
StringBuilder html = new StringBuilder();
try{
URL url = new URL(addr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
for(;;){
String line = br.readLine();
if(line == null)break;
html.append(line );
html.append('\n');
}
br.close();
}
conn.disconnect();
}
}
catch(Exception ex){;}
return html.toString();


2.Post 방식

example)

{
...
   login();
... 


public void login() {
        try {
             URL url = new URL("http://xxx.xxx.xx.xx/xxxx/xxxx/xxx");      
             HttpURLConnection http = (HttpURLConnection) url.openConnection();  

             http.setDefaultUseCaches(false);                                           
             http.setDoInput(true);
             http.setDoOutput(true);
             http.setRequestMethod("POST");
             http.setRequestProperty("content-type", "application/x-www-form-urlencoded");
             
             EditText pwet = (EditText)findViewById(R.id.login_pw_edit);
             EditText idet = (EditText)findViewById(R.id.login_id_edit);

             StringBuffer buffer = new StringBuffer();
                     
buffer.append("LOGIN__USER_ID").append("=").append(idet.getText().toString()).append("&");            
             buffer.append("LOGIN__USER_PW").append("=").append(pwet.getText().toString()); 
                       
             OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR");
             PrintWriter writer = new PrintWriter(outStream); 
             writer.write(buffer.toString());//send data
             writer.flush();

             InputStreamReader tmp = new InputStreamReader(http.getInputStream(), "EUC-KR"); 
             BufferedReader reader = new BufferedReader(tmp);
             StringBuilder builder = new StringBuilder();
             String str;
             while ((str = reader.readLine()) != null) {
                  builder.append(str + "\n");
             }
             String  result = builder.toString();//request result
            ...
        } catch (MalformedURLException e) {;} catch (IOException e) {;} 


안녕하세요 ^^
설명을 조금 해드리겠습니다 ㅎ
우선 get방식은 경로에 위에 예제에도 나왔듯이 url에  ?변수명=데이터식으로 이어붙이기를 계속
하시면 되겠죠? 예제보시면 딱 아~ 하실꺼에요..(제 희망사항 ㅠ_ㅠ)

그리고 post방식은  2.post방식 예제에서 노란색으로 표시된 부분을 보시면 변수명 데이터 삽입한
게 보이실 거에요 ㅎ
그럼 응용하면 되겠죠?

도움 되셧길 바래요~

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.17 16:05
<activity android:name=".xxxx"
                  android:windowSoftInputMode="adjustPan">



안녕하세요 ^^
잠깐 설명을 해보겠습니다.

 EditText가 있다면 글을 적으려고하면 UI가 위로 같이 올라가버리는 현상이 일어나죠?
이것을 없에기 위해서 EditText를 클릭하여 키보드가 올라가도 UI는 그대로 변경되지
않게 하기위한 방법입니다.

사용방법은 AndroidManifest.xml에서 해당 Activity에 위의 예제처럼 추가해주시면 됩니다.
완전 똑같이 하실필요는 없구요 ㅎ추가만해주셔도 되요 ㅎ

도움이 되셨길 바래요ㅎ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.12 18:21
Step 1. Create CustomButton.xml
res/drawable/custombtn.xml <- create custombtn.xml

 <?xml version="1.0" encoding="utf-8"?> 
<selector  xmlns:android="http://schemas.android.com/apk/res/android">
<item 
    android:state_pressed="false"
    android:drawable="@drawable/bu4_searchall"/>
<item 
    android:drawable="@drawable/bu4_searchall_o"/>
</selector> 

Step 2. To Use 
-ex)res/layout/main.xml 
...
<ImageView
android:src="@drawable/custombtn"
android:id="@+id/main_pressedimgtest_iv" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"
/> 
... 

Step 3. SetOnClickListener
-user source  ex)src/com.xxx.xxx/main.java
...
 ImageView custombtn = (ImageView)findViewById(R.id.main_pressedimgtest_iv);
 custombtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
... 

안녕하세요 ^^
설명을 해드릴까 합니다.

이건 하단 컨트롤바같은 UI를 만들때 사용자가 press할때 이미지를 변경해주는 방법이에요.
사용자에게 터치감을 주기위해서 사용했습니다.

방법은 우선 버튼의 Step1처럼 버튼 누를시 이미지 변경되게 구현하구요
Step2에서 구현한 커스텀UI를 적용해요  Step2에 노란색 부분을 보시면 알수있겠죠?
Step3에서 클릭이벤트를 설정해줘야 press를 하겠죠?

도움되셧길 바랍니다. ㅎ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.11 14:14
TextView customview = new TextView(ctx);
customview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,                                                                   LayoutParams.WRAP_CONTENT));
Bitmap src = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.and_pop);
src= Bitmap.createScaledBitmap(src, 600, 50,true);
customview.setBackgroundDrawable( new BitmapDrawable(src));

customview.setText(msg.getData().getCharSequence("data"));
customview.setGravity(Gravity.CENTER_VERTICAL);
customview.setPadding(100, 10, 0, 0);

Toast custo = new Toast(ctx);
custo.setView(customview);//insert u r custom view
custo.setGravity(Gravity.CENTER_VERTICAL, 10, 10);
custo.setDuration(Toast.LENGTH_LONG);
custo.show();


안녕하세요 ^^
잠시 설명을 해볼까 합니다.

Toast를 커스텀하는것인데요.
동적으로 원하시는 UI로 구현하시고 혹은 xml로 UI구현하신걸 사용하셔도 무방하구요.
중요한부분은 그렇게 생성한 View를 Toast에 setView를 해주시면 끗!


노란색부분처럼 하시면 되요!

도움되셧길 바랍니다.

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.07 16:55
https://market.android.com/publish/

안녕하세요 ^^
마켓에 어플등록하기위한 경로 입니다.
클릭하면 바로 어플 등록하러 ㄱㄱ

도움되셨길 바랍니다.

즐코딩! 낫빡침! 

신고
posted by Solver Full-stack Developer 2011.10.05 18:46
WebView child = new WebView(this);
... 

child.setWebChromeClient(new WebChromeClient() {
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.i("MyApplication","yoon|"+cm.message() + " -- From line " + cm.lineNumber()+" of "+cm.sourceId());
return true;
}
 
});
...

안녕하세요 ^^
설명을 해볼까해요ㅎ

하이브리드앱으로 앱구현시 자바스크립트애러를 보기위해서 사용해봤는데요.
위의 예제처럼 해당 Webview에 setWebChromeClient로 세팅해주시면된답니다.

도움되셨길 바랍니다.ㅎ

즐코딩! 낫빡칙!
 

신고
posted by Solver Full-stack Developer 2011.10.05 17:44
Step 1.create  CustomViewer.java  and custom!

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.Scroller;


public class CustomViewer extends ViewGroup {
private Scroller mScroller;
private VelocityTracker mVelocityTracker;
 private int mScrollX = 0;
private int mCurrentScreen = 0;//현제 창의 위치
 private float mLastMotionX;
 private static final String LOG_TAG = "FlingAndScrollViewer";
 private static final int SNAP_VELOCITY = 1000;//속도
 private final static int TOUCH_STATE_REST = 0;
private final static int TOUCH_STATE_SCROLLING = 1;
 private int mTouchState = TOUCH_STATE_REST;
 private int mTouchSlop = 0;
 public CustomViewer(Context context) {
    super(context);
    mScroller = new Scroller(context);
     mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
     this.setLayoutParams(new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.FILL_PARENT));
}
 public CustomViewer(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray a = getContext().obtainStyledAttributes(attrs,
            R.styleable.FlingAndScrollViewer);
    mCurrentScreen = a.getInteger(
            R.styleable.FlingAndScrollViewer_default_screen, 0);
     mScroller = new Scroller(context);
     mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
     this.setLayoutParams(new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.FILL_PARENT));
 }
 public void setInitialPosition(int initialPosition){
    mCurrentScreen = initialPosition;
}
 @Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    /*
     * This method JUST determines whether we want to intercept the motion.
     * If we return true, onTouchEvent will be called and we do the actual
     * scrolling there.
     */
     /*
     * Shortcut the most recurring case: the user is in the dragging state
     * and he is moving his finger. We want to intercept this motion.
     */
    final int action = ev.getAction();
    if ((action == MotionEvent.ACTION_MOVE)
            && (mTouchState != TOUCH_STATE_REST)) {
        return true;
    }
     final float x = ev.getX();
     switch (action) {
    case MotionEvent.ACTION_MOVE:
        /*
         * mIsBeingDragged == false, otherwise the shortcut would have
         * caught it. Check whether the user has moved far enough from his
         * original down touch.
         */
         /*
         * Locally do absolute value. mLastMotionX is set to the y value of
         * the down event.
         */
        final int xDiff = (int) Math.abs(x - mLastMotionX);
         boolean xMoved = xDiff > mTouchSlop;
         if (xMoved) {
            // Scroll if the user moved far enough along the X axis
            mTouchState = TOUCH_STATE_SCROLLING;
        }
        break;
     case MotionEvent.ACTION_DOWN:
        // Remember location of down touch
        mLastMotionX = x;
         /*
         * If being flinged and user touches the screen, initiate drag;
         * otherwise don't. mScroller.isFinished should be false when being
         * flinged.
         */
        mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST
                : TOUCH_STATE_SCROLLING;
        break;
     case MotionEvent.ACTION_CANCEL:
    case MotionEvent.ACTION_UP:
        // Release the drag
        mTouchState = TOUCH_STATE_REST;
        break;
    }
     /*
     * The only time we want to intercept motion events is if we are in the
     * drag mode.
     */
    return mTouchState != TOUCH_STATE_REST;
}
 @Override
public boolean onTouchEvent(MotionEvent event) {
     if (mVelocityTracker == null) {
        mVelocityTracker = VelocityTracker.obtain();
    }
    mVelocityTracker.addMovement(event);
     final int action = event.getAction();
    final float x = event.getX();
     switch (action) {
    case MotionEvent.ACTION_DOWN:
        Log.i(LOG_TAG, "event : down");
        /*
         * If being flinged and user touches, stop the fling. isFinished
         * will be false if being flinged.
         */
        if (!mScroller.isFinished()) {
            mScroller.abortAnimation();
        }
         // Remember where the motion event started
        mLastMotionX = x;
        break;
    case MotionEvent.ACTION_MOVE:
        // Log.i(LOG_TAG,"event : move");
        // if (mTouchState == TOUCH_STATE_SCROLLING) {
        // Scroll to follow the motion event
        final int deltaX = (int) (mLastMotionX - x);
        mLastMotionX = x;
         // Log.i(LOG_TAG, "event : move, deltaX " + deltaX + ", mScrollX " +
        // mScrollX);
         if (deltaX < 0) {
            if (mScrollX > 0) {
                scrollBy(Math.max(-mScrollX, deltaX), 0);
            }
        } else if (deltaX > 0) {
            final int availableToScroll = getChildAt(getChildCount() - 1)
                    .getRight() - mScrollX - getWidth();
            if (availableToScroll > 0) {
                scrollBy(Math.min(availableToScroll, deltaX), 0);
            }
        }
        // }
        break;
    case MotionEvent.ACTION_UP:
        Log.i(LOG_TAG, "event : up");
        // if (mTouchState == TOUCH_STATE_SCROLLING) {
        final VelocityTracker velocityTracker = mVelocityTracker;
        velocityTracker.computeCurrentVelocity(1000);
        int velocityX = (int) velocityTracker.getXVelocity();
         if (velocityX > SNAP_VELOCITY && mCurrentScreen > 0) {
            // Fling hard enough to move left
            snapToScreen(mCurrentScreen - 1);
        } else if (velocityX < -SNAP_VELOCITY
                && mCurrentScreen < getChildCount() - 1) {
            // Fling hard enough to move right
            snapToScreen(mCurrentScreen + 1);
        } else {
            snapToDestination();
        }
         if (mVelocityTracker != null) {
            mVelocityTracker.recycle();
            mVelocityTracker = null;
        }
        // }
        mTouchState = TOUCH_STATE_REST;
        break;
    case MotionEvent.ACTION_CANCEL:
        Log.i(LOG_TAG, "event : cancel");
        mTouchState = TOUCH_STATE_REST;
    }
    mScrollX = this.getScrollX();
     return true;
}
 private void snapToDestination() {
    final int screenWidth = getWidth();
    final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth;
    Log.i(LOG_TAG, "from des");
    snapToScreen(whichScreen);
}
 public void snapToScreen(int whichScreen) {
    Log.i(LOG_TAG, "snap To Screen " + whichScreen);
    mCurrentScreen = whichScreen;
    final int newX = whichScreen * getWidth();
    final int delta = newX - mScrollX;
    mScroller.startScroll(mScrollX, 0, delta, 0, Math.abs(delta) * 2);
    invalidate();
}
 public void setToScreen(int whichScreen) {
    Log.i(LOG_TAG, "set To Screen " + whichScreen);
    mCurrentScreen = whichScreen;
    final int newX = whichScreen * getWidth();
    mScroller.startScroll(newX, 0, 0, 0, 10);
    invalidate();
}
 @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int childLeft = 0;
     final int count = getChildCount();
    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        if (child.getVisibility() != View.GONE) {
            final int childWidth = child.getMeasuredWidth();
            child.layout(childLeft, 0, childLeft + childWidth,
                    child.getMeasuredHeight());
            childLeft += childWidth;
        }
    }
 }
 @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     final int width = MeasureSpec.getSize(widthMeasureSpec);
    final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    if (widthMode != MeasureSpec.EXACTLY) {
        throw new IllegalStateException("error mode.");
    }
     final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    if (heightMode != MeasureSpec.EXACTLY) {
        throw new IllegalStateException("error mode.");
    }
     // The children are given the same width and height as the workspace
    final int count = getChildCount();
    for (int i = 0; i < count; i++) {
        getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
    }
    Log.i(LOG_TAG, "moving to screen " + mCurrentScreen);
    scrollTo(mCurrentScreen * width, 0);
}
 @Override
public void computeScroll() {
    if (mScroller.computeScrollOffset()) {
        mScrollX = mScroller.getCurrX();
        scrollTo(mScrollX, 0);
        postInvalidate();
    }
}
 /**
 * Return the parceable instance to be saved
 */
@Override
protected Parcelable onSaveInstanceState() {
    final SavedState state = new SavedState(super.onSaveInstanceState());
    state.currentScreen = mCurrentScreen;
    return state;
}
 /**
 * Restore the previous saved current screen
 */
@Override
protected void onRestoreInstanceState(Parcelable state) {
    SavedState savedState = (SavedState) state;
    super.onRestoreInstanceState(savedState.getSuperState());
    if (savedState.currentScreen != -1) {
        mCurrentScreen = savedState.currentScreen;
    }
}
 // ========================= INNER CLASSES ==============================
 public interface onViewChangedEvent {
    void onViewChange(int currentViewIndex);
}
 /**
 * A SavedState which save and load the current screen
 */
public static class SavedState extends BaseSavedState {
    int currentScreen = -1;
     /**
     * Internal constructor
     *
     * @param superState
     */
    SavedState(Parcelable superState) {
        super(superState);
    }
     /**
     * Private constructor
     *
     * @param in
     */
    private SavedState(Parcel in) {
        super(in);
        currentScreen = in.readInt();
    }
     /**
     * Save the current screen
     */
    @Override
    public void writeToParcel(Parcel out, int flags) {
        super.writeToParcel(out, flags);
        out.writeInt(currentScreen);
    }
     /**
     * Return a Parcelable creator
     */
    public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {
        public SavedState createFromParcel(Parcel in) {
            return new SavedState(in);
        }
         public SavedState[] newArray(int size) {
            return new SavedState[size];
        }
    };
}

--------------------------------------------------------------------------------
Step 2. Add attrs
add res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomViewer">
        <attr name="default_screen" format="integer"/>
    </declare-styleable>
</resources> 
--------------------------------------------------------------------------------
Step 3. Use u r layout!
ex)res/layout/main.xml 
<com.xxxx.xxxx.CustomViewer
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:id="@+id/flingScrollViewer"/> 

안녕하세요 ^^
설명을 조금 해보겠습니다.

이 커스텀 UI를 사용하면 폰에서 홈스크린처럼 다음페이지,현제페이지, 전페이지를 스크롤 이동하면 모두보이는 기능입니다. 말이좀 이상한가요?
홈스크린이나 포토 갤러리와 같은 layout이라는 것입니다.

fling할때 가속도와 horizental scroll을 적절히 사용되었습니다.

도움되셧길 바랍니다.

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.05 17:18
public class CustomDialog extends Dialog implements android.view.View.OnClickListener{
CustomDialog dlg;
public CustomDialog(Context context) {
super(context);
getWindow().setBackgroundDrawableResource(R.drawable.img_background);
setContentView(R.layout.customdialog);
dlg=this;
Button closeBtn =(Button)findViewById(R.id.customedlg_close_btn);
closeBtn.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.customedlg_close_btn:
dlg.dismiss();
break;
}
}

}

안녕하세요 ^^
설명을 해볼까해요 ㅎ
커스텀으로 Dialog를 구현했을 시
배경화면을 변경하고 싶으시겠죠?
그때 위의 노란색 부분과같이 이미지변경을 하시거나
색을 변경하시거나 혹은 투명하게(Colors.TRANSPARENT) 만드실 수 있어요!

도움되셨길 바랍니다.

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.05 17:15
1.
<CheckBox
android:id="@+id/setting_idsave_cb"
android:button="@drawable/checkbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="아이디저장"
android:textColor="#9b9d9d"
android:textSize="16px"
android:paddingRight="35px"/>

2.
dir is.. res/drawable/checkbtn.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_checked="true"
        android:drawable="@drawable/img_checked" />
    <item
        android:drawable="@drawable/img_check" />
</selecto 
 

안녕하세요 ^^
설명을 해보겠습니다!

사용방법은 1번과같이 button을 커스텀한 checkbox로 세팅해주시면됩니다.
2과같이 체그될때 이미지, 체크안될을때 이미지를 설정해주시면 끗!

도움되셧길 바랍니다 ㅎ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.05 16:52
1.
<RadioButton
android:id="@+id/setting_p_rb"
android:button="@drawable/radiobtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="개인회원 "
android:textColor="#9b9d9d"
android:textSize="16px"
android:layout_marginBottom="5px"
android:layout_marginTop="2px"
android:paddingRight="47px"/> 

2.
dir is .. res/drawable/radiobtn.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_checked="true"
        android:drawable="@drawable/i_radio_ch" />
    <item
        android:drawable="@drawable/i_radio" />
</selector> 

ch -> checked 

안녕하세요 ^^
설명을 잠시 해보겠어요.
CheckBox와 같은 방식으로 2번처럼 커스텀한 UI 1번처럼 button에 UI를 세팅해주시면 됩니다.

도움되셧길 바랍니다 ㅎ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.10.05 16:47
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.widget.Button;

public class CustomDialog extends Dialog implements android.view.View.OnClickListener{
CustomDialog dlg;
public CustomDialog(Context context) {
super(context);
setContentView(R.layout.customdialog);
dlg=this;
Button closeBtn =(Button)findViewById(R.id.customedlg_close_btn);
closeBtn.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.customedlg_close_btn:
dlg.dismiss();
break;
}
}

}

안녕하세요 ^^
설명을 해보겠습니다.

커스텀다이얼로그를 구현할 시 클릭이벤트 생성하기가 잘안되실텐데요.
위와같이 implements를 해주시면 onclick이벤트가 생깁니다.
예제의 노란색부분을 보시면 onclick리스너를 implements 해서
onclick이벤트를 생성하여 원하는 view에 setOnClickListener를 설정해주시면
됩니다.

도움되셨길 바랍니다.ㅎ

즐코딩! 낫빡침! 


신고
posted by Solver Full-stack Developer 2011.10.05 16:33
1.
<ProgressBar
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:paddingTop="20px"
  android:indeterminateDrawable="@drawable/loadingspin"
  android:animationResolution="1"
  />

 2.
dir is .. res/drawable/loadingspin.xml

<?xml version="1.0" encoding="utf-8"?>
 <layer-list  xmlns:android="http://schemas.android.com/apk/res/android">
 <item>
  <rotate 
  android:drawable="@drawable/loading" ------------------------------↘


  android:pivotX="50%"
  android:pivotY="50%"
  android:fromDegrees="0"
  android:toDegrees="1080"
/>
  </item>
  </layer-list>

 

안녕하세요 ^^
잠시 설명을 해보겟습니다.

2번처럼 UI를 xml를 구현해주세요. drawable에 원하시는 png로 되있는 로딩 이미지를
세팅해주시고
1번처럼 indeterminateDrawable에 구현한 UI를 세팅해주시면 됩니다.

도움되셨으면 좋겠네요 ㅎ

즐코딩! 낫빡침! 


신고
posted by Solver Full-stack Developer 2011.07.28 17:23


1.Parent Activity


Intent intent = new Intent(nowclassname.this, childclassname.class);
startActivityForResult(intent,1); 

....

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode== 1 || resultCode==RESULT_OK){
if(data.getStringExtra("isEnd").equals("Y")){//use data
//TODO 
}
}
}


 


2.Child Activity 

public void onBackPressed() { // if child acticity end
super.onBackPressed();
Intent _intent = getIntent();
   _intent.putExtra("isEnd", "N");
   setResult(RESULT_OK,_intent);
   finish();


안녕하세요 ^^
설명을 좀 해드릴까 합니다. ㅎ

1번은 다른 Activity를 호출할 Activity입니다.
다른 Activity를 호출할때  startActivityForResult(Intent in,int requestCode)를 이용합니다. 예제에서 보듯이 requestCode로 구분할 수가 있습니다.빨간색으로 표시 했듯이 말이죠.

2번에서 보듯이 activity가 종료되는 시점에 데이터를 넣어주면 자신을 호출한 Activity에
setResult를 이용하여 데이터를 넘겨줄 수 잇습니다.

 도움이 되셨으면 좋겠네요 ㅎ

즐코딩! 낫빡침! 

 
신고
posted by Solver Full-stack Developer 2011.07.20 11:25


getResources().openRawResourceFd(R.raw.filename).
createOutputStream();
신고
posted by Solver Full-stack Developer 2011.07.19 15:07
void DownloadData(){
StringBuilder html = new StringBuilder();
try{
URL url = new URL("http://192.XXX.XXX.XXX/XXXXX");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){

File file = new File("/sdcard/", "filename.ZIP");
       FileOutputStream fileOutput = new FileOutputStream(file);
       InputStream inputStream = conn.getInputStream();

       int downloadedSize = 0;
       byte[] buffer = new byte[1024];
       int bufferLength = 0; 

       while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
               fileOutput.write(buffer, 0, bufferLength);
               downloadedSize += bufferLength;

       }
       fileOutput.close();
}
conn.disconnect();
}catch(Exception ex){;}
}
신고
posted by Solver Full-stack Developer 2011.06.15 18:16
1.

 


2.

 Location: 
http://download.aptana.com/tools/studio/plugin/install/studio


3.

 

4.

 

5.

 

6.

 


---------------------------------------end------------------------------------------------

view JSONdata to tree type


7.

 

8.

 

9.Use outline [window -> show view -> outline]

 ↑ Click ME !
신고
posted by Solver Full-stack Developer 2011.06.15 17:36
1. JSONArray

{
"number":[
    1,
    2,
    3,
    4,
    5
  ] 
}


String json4arr="{\"number\":[1,2,3,4,5]}";
        try {
        int sum=0;
        JSONObject jobj = new JSONObject(json4arr);
JSONArray jarr = jobj.getJSONArray("number");
for(int i=0;i<jarr.length();i++){
int tmp=jarr.getInt(i);
if(tmp%2==1){
sum += tmp;
}
}

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


2.JSONObject

{
    "color":{
    "top":"red",
    "bottom":"black",
    "
left":"blue",
    "right":"green"
  }
 
}

String json4obj="{\"color\":{\"top\":\"red\",\"bottom\":\"black\",\"left\":\"blue\",\"right\":\"green\"}}";
        try {
        JSONObject jobj = new JSONObject(json4obj);
        JSONObject color = jobj.getJSONObject("color");
       
       
        String top_color="";
         if(color.has("left")){
        top_color=color.getString("left");
         }
} catch (JSONException e) {
e.printStackTrace();
}

 3.aptana
 트리형식으로 json데이터를 보는데 도와준다./view JSONdata to tree type

 
http://codedb.tistory.com/entry/Android-plugging-Aptana-in-eclipe-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%97%90%EC%84%9C-aptana-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0   <- install aptana in eclipse

안녕하세요 ^^

잠시 설명을 해볼까 해요.

1번째는 json array인데요 [] 이런형식으로 데이터가 배열(array)형식으로 되어있는 데이터를 가져옵니다. 예제 json array 샘플에서 number데이터가 그러한 예이죠.

노란색으로 표현하였듯이 getJSONArray로 number데이터를 가져와 데이터타입에 맞게 index를 넣어 get해오는데요. 예제는 숫자데이터라 getInt를 사용하였는데 그부분은 잘 구미에맞게 자유자재로 사용하실꺼라고 생각해요 ㅎ

2번째는 json object인데요. getJSONObject로 데이터를 get해오죠? 그리고 has라는 부분에 노란색으로 표시하였는데요. has는 말그대로 해당데이터가 있는지 없는지 true/false로 알아내는 함수입니다. 데이터를 가져오려하는데 없다면 곤란하겠죠? 예외처리로 혹은 다른 용도로 has로 해당데이터가 존재하는지 유무를 따질때 유명하겠네요 ㅎ 

그럼 도움되셨으면 좋겠네요 ㅎ

enjoy coding! Don't be angry! 
 

 
신고
posted by Solver Full-stack Developer 2011.06.15 16:56

wv.setSupportZoom(
true);
wv.getSettings().setBuiltInZoomControls(true);

true is enable
false is disable 
신고
posted by Solver Full-stack Developer 2011.06.14 11:51


"android.resource://com.XXX.YYYYYYY/"+R.raw.dataname
신고
posted by Solver Full-stack Developer 2011.06.14 11:50

1. read

 Properties ini = new Properties();
 String mode="";
 ini.load(new FileInputStream("/sdcard/init.ini")); 
 mode=ini.getProperty("version"); 


2.write

Properties ini = new Properties();
ini.put("version", "default"); // property Add
ini.setProperty("version", "single"); 
ini.store(new FileOutputStream("/sdcard/FTPTemp/init.ini",true), "Initialize"); //save
신고
posted by Solver Full-stack Developer 2011.06.13 17:55
참고 사진 출처: http://asantoso.wordpress.com



Step 1. Generate R.java

cd c:\\android\androidsdk\platform-tools
aapt package -m -J "C:\Android\Workspace\ProjectName\gen" -M "C:\Android\Workspace\ProjectName\AndroidManifest.xml" -S "C:\Android\Workspace\ProjectName\res" -j "C:\Android\Workspace\ProjectName\libs" -I "C:\Android\AndroidSDK\platforms\android-7\android.jar"

Step 2. Compile src&R.java
 
cd C:\Program Files\Java\jdk1.6.0_23\bin
 
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\gen\com\Company\PackageName1\R.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\PackageName2\C1.java" -cp "C:\Android\Workspace\ProjectName\libs\JarName.jar"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\PackageName2\C2.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\PackageName2\C3.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C4.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C5.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C6.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C7.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C8.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\I9.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C10.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\C11.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI12.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI13.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI14.java" -deprecation "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI141.java" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI142.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI15.java" 
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\UI16.java"  
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\PackageName2\UI17.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\PackageName2\UI18.java"
javac -d "C:\Android\Workspace\ProjectName\bin" -classpath "C:\Android\Workspace\ProjectName\bin" -bootclasspath "C:\Android\AndroidSDK\platforms\android-7\android.jar" "C:\Android\Workspace\ProjectName\src\com\Company\PackageName1\PackageNa

Step 3. Convert classes to Dalvik bytecodes

cd C:\Android\AndroidSDK\tools
dx --dex --output="C:\Android\Workspace\ProjectName\bin\classes.dex" --positions=lines C:\Android\Workspace\ProjectName\bin\

Step 4. Create unsigned APK

cd C:\Android\AndroidSDK\tools
aapt package -f -M "C:\Android\Workspace\ProjectName\AndroidManifest.xml" -S "C:\Android\Workspace\ProjectName\res" -j "C:\Android\Workspace\ProjectName\libs\JarName.jar" -A "C:\Android\Workspace\ProjectName\assets" -I "C:\Android\AndroidSDK\platforms\android-7\android.jar" -F "C:\Android\Workspace\ProjectName\bin\ProjectName.apk"

apkbuilder "C:\Android\Workspace\ProjectName\bin\ProjectName-debug.apk" -z "C:\Android\Workspace\ProjectName\bin\ProjectName.apk" -f "C:\Android\Workspace\ProjectName\bin\classes.dex" -rf "C:\Android\Workspace\ProjectName\src" -rj "C:\Android\Workspace\ProjectName\libs\JarName.jar"

Step 6. Generate a key
 
use key tool or use eclipe -> u r project Rclick -> AndroidTools -> export signed apk

Step 7. Sign APK

cd C:\Android\AndroidSDK\tools
jarsigner -keystore "C:\Android\ProjectName_key.key" -storepass "Password" -keypass "Password" -signedjar "C:\Android\APK\ProjectName_v1.0.apk" "C:\Android\Workspace\ProjectName\bin\ProjectName.apk" "Key-Alias"

예제 디렉토리 이미지 

설명:
음... 쿨하게 다 오픈하고싶지만... 어쩔수없네요... 자동배포를 위해 테스트한거였구요.

우선 리소스를 R.java로 만들고

javac로 R.java와 소스코드들 compile해준다. compile시 include관계 잘봐가면서 해줘야한다. 외부에서 끌어다 사용하는 jar있으면 표시해줘야 한다.

compile된 class파일들을 Dalvik으로 JVM용으로 변환 해준다.

aapt(Android Asset Packaging tool)을 이용하여 apk 만들고

apkbuilder로 unsigned apk를 만든다.

키는 keystore에서 만들거나 eclipe에서 제공하는 android tool을 사용한다 플젝 우클릭 안드 툴 익소포트 사인드 @#@가면 있다. 위에 명시해두었다...

마지막으로 unsigned apk와 key를 사용하여 배포한다.

 
신고