반응형

* 안드로이드 내부 저장소 파일 읽고 쓰고 지우기 예제...

 

메인화면

 

전체 소스 코드

 

package com.example.administrator.androidcontrolex;

import android.content.Context;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class InFileExActivity extends AppCompatActivity {

    EditText etInput;
    TextView tvList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_in_file_ex);

        //액션바 셋팅
        ActionBar ab = getSupportActionBar();
        ab.setTitle("내부 파일 예제...");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        etInput = (EditText)findViewById(R.id.txtInput);
        tvList = (TextView)findViewById(R.id.txtList);

        Button btnS = (Button)findViewById(R.id.btnSave);
        Button btnL = (Button)findViewById(R.id.btnLoad);
        Button btnD = (Button)findViewById(R.id.btnDelete);
        Button btnO = (Button)findViewById(R.id.btnOpen);

        btnS.setOnClickListener(lisner);
        btnL.setOnClickListener(lisner);
        btnD.setOnClickListener(lisner);
        btnO.setOnClickListener(lisner);

    }

    public  void FileSave(String strFileName, String strMsg)
    {
        try
        {
            //파일이름 날짜 표현 방법 : String strTime = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            //20180903_112233
            FileOutputStream fos = openFileOutput(strFileName, Context.MODE_APPEND);
            String strText = strMsg + "\n";
            fos.write(strText.getBytes());
            fos.close();
        }
        catch (Exception e)
        {
            Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
            return;
        }

        Toast.makeText(getApplicationContext(),"파일 저장이 완료 되었습니다.",Toast.LENGTH_SHORT).show();
    }

    public  String FileLoad(String strFileName)
    {
        String strTmp;
        try {
            FileInputStream fis = openFileInput(strFileName);
            StringBuffer sb = new StringBuffer();
            byte dataBuffer[] = new byte[1024];
            int n = 0 ;

            // -1 파일 끝을 의미
            while((n=fis.read(dataBuffer)) != -1 ){
                sb.append(new String(dataBuffer) );
            }

            strTmp = sb.toString();
            fis.close();

        }
        catch (Exception e)
        {
            Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
            return "";
        }

        Toast.makeText(getApplicationContext(),"파일 로드가 완료 되었습니다.",Toast.LENGTH_SHORT).show();
        return  strTmp;
    }

    public  void FileDelete(String strFileName)
    {
        if(deleteFile(strFileName))
        {
            Toast.makeText(getApplicationContext(),"파일 정상적으로 삭제 되었습니다.",Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(getApplicationContext(),"파일 삭제하는데 실패 하였습니다.",Toast.LENGTH_SHORT).show();
        }
    }


    Button.OnClickListener lisner = new Button.OnClickListener(){
      public void onClick(View vi)
      {
            switch (vi.getId())
            {
                case R.id.btnSave :
                {
                    FileSave("test.txt", etInput.getText().toString());
                    etInput.setText("");
                    break;
                }
                case R.id.btnLoad :
                {
                    tvList.setText(FileLoad("test.txt"));
                    break;
                }
                case R.id.btnDelete :
                {
                    FileDelete("test.txt");
                    break;
                }
                case R.id.btnOpen :
                {

                    break;
                }
            }
      }
    };

  
}

 

파일 Write Source

 

파일 Read Source

파일 Delete Source

 

 

*예제 결과 화면

파일 저장
파일 읽기
파일 삭제
파일이 삭제 된 후 파일 읽기한 화면

 

반응형
반응형

* 휴대폰 설정 -> 일반 -> 휴대폰 정보 로 들어 갑니다.

  소프트웨어 정보 로 또 들어가서 빌드 번호가 나오게 되면

  두번 연속 클릭 하게 되면 개발자 모드로 진입 하게 됩니다.

 

  개발자 모드로 되었으면 개발자 옵션에서 USB 디버깅 연결시 항상 

  허용을 해 줍니다. 

  안드로이드 스튜디오를 열고 실행을 했을 때 아래의 그림과 같이 Connected

  Devices 에 USB 로 연결된 휴대폰이 뜨면 성공 안뜨면... 

  Ex) 삼성 폰이면 삼성 홈페이지로 이동 드라이브를 다운 받아 설치를 합니다.

       아래의 휴대폰은 LG 폰으로 연결 한 예

 

반응형
반응형

 

* 기존 프로젝트 불러 올 시

- 상위 버전 프로젝트 시 오류

: IDE VERSION 오류, gradle 오류

스튜디오 버전 3.0 이상 필요

This Gradle plugin requires a newer IDE able to request IDE model level 3.

For Android Studio this means version 3.0+

 

-> 상위 버전 프로젝트 설치 및 SDK 매너져에서 SDK 버전에 맞게 설치

- 프로젝트 폴더 이름이 한글이 들어간 경우 오류가 남.

반응형
반응형

* 안드로이드 스튜디오 빌드 후 휴대폰으로 APK Install apk 시 오류

 

메시지 박스 하나 뜨고 기존에 있던 프로젝트를 삭제 하겠냐고 물어 보고 YES 하면 삭제가 안되고  실패 에러 메시지가 delete_failed_internal_error error while installing apks~  나오는 경우

 

* 안드로이드 휴대폰에 직접 테스트 시 Run 을 하고 난 뒤 다시 Run 할 때 발생 하는 오류

 -> 해결 방법 -> 안드로이드 스튜디오 File -> Settings ->

     왼쪽 트리뷰에 Build, Execution, Deployment 메뉴 클릭 ->Instant Run 클릭 후 ->

     오른쪽 화면에 표시되는 곳 에서 Enable Instant Run to hot swap code/resource changes on deploy

     체크 되어 있는 것을 해제 후 Apply 버튼 클릭

 

반응형
반응형

1. Empty Activity 를 선택 하여 Activity를 추가 또는 생성.

2. 기본 Activity 에 TabHost 컨트롤 을 추가

3. 소스 코드 및 실행 화면.

 

 

 

 

package com.example.administrator.androidcontrolex;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TabHost;

public class TabViewActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tab_view);

        TabHost tb = (TabHost)findViewById(R.id.tbHost);   // 탭호스트 ID: thHost
        tb.setup();

        TabHost.TabSpec ts1 = tb.newTabSpec("Tab Spec1");   
        ts1.setContent(R.id.tab1);     //탭 컨텐츠 xml 상에 Tabhost->LinearLayout-> TabWidget->FrameLayout->LinearLayout해당
        ts1.setIndicator("TAB 1");     //탭 이름 
        tb.addTab(ts1);                //탭 추가

        TabHost.TabSpec ts2 = tb.newTabSpec("Tab Spec2");
        ts2.setContent(R.id.tab2);
        ts2.setIndicator("TAB 2");
        tb.addTab(ts2);

        TabHost.TabSpec ts3 = tb.newTabSpec("Tab Spec3");
        ts3.setContent(R.id.tab3);
        ts3.setIndicator("TAB 3");
        tb.addTab(ts3);

         //탭 클릭 이벤트...

         tb.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
            @Override
            public void onTabChanged(String tabId) {
                // TODO Auto-generated method stub
            }
         });


     }                                                           
}
반응형
반응형

* 아래와 같이 실행 하기전 에뮬레이터는 이미 켜져 있는 상태에서 실행 하여야 됨.

 

1. C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools

   환경 변수 등록.

   -> 내컴퓨터 속성 -> 고급 시스템 설정 -> 고급 탭 클릭 -> 환경 변수 버튼 클릭

   -> 시스템 변수 path 를 찾아 클릭 후 편집 버튼 위 Android SDK 폴더 경로를

       맨 마지막에 추가 해준다. 확인 버튼

2. 환경 변수 등록을 마쳤으면 첨부 파일 다운 후 cmd 또는 보조프로그램에 명령프롬

   프트 클릭 첨부된 파일 다운 받은 경로로 이동 ex) 바탕 화면에 다운을 받아 놨다면

   아래의 경로가 됨. 
   -> C:\Users\Administrator\Desktop>adb install hangulkeyboard.apk 를 눌러 엔터

       설치가 되고 Sucess 가 나오면 준비 완료

 

hangulkeyboard.apk
0.06MB

 

3. 안드로이드 에뮬레이터 에서 설정 

   -> 언어 및 키보드 설정에서 키보드 us 로 되어 있는 것을 한글 키보드로 바꿔 주면 됨.

 

 

반응형
반응형

위의 그림과 같이 왼쪽 res -> menu 폴더에서 오른쪽 마우스 버튼을 클릭 하여 xml 파일을 생성 한다.

xml 이름은 각자 알아서 정의 하면 됩니다. 단! menu 폴더가 없을 시 안드로이드 프로젝트 생성된 폴더

로 가셔서 아래는 제 프로젝트 만든 곳 임.

C:\Users\Administrator\AndroidStudioProjects\VisualProgramming\app\src\main\res

탐색기를 열어 직접 위의 경로로 이동 하여 res 폴더에 menu 폴더를 생성 해 줍니다.

 

아래의 그림과 같이 xml 생성 후 클릭 하여 탭에 내용에 들어 가보면

 

<item android:id="@+id/menu_log"

       android:title="로그 정보"

       app:showAsAction="never">             

 

메뉴 아이템을 하나 추가 하여 저장.

참고로 item 부분에 showAsAction 부분은 

app:showAsAction="always" : 항상 보이게 표시

app:showAsAction="never" : 항상 overflow 에 표시

app:showAsAction="ifRoom" : 액션바에 공간이 있을경우 표시

app:showAsAction="withText" : 액션바에 아이콘과 텍스트 함께 표시

이렇게 구성 됩니다.

 

이제 xml 내용은 다 끝났고 메뉴를 추가할 소스 부분에 아래와 같이 두 오버로드 된 함수를 포함 시켜 줍니다.

 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);       <-R.menu.menu - xml 파일 이름을 적으면 됩니다.

    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{
    int id = menuItem.getItemId();
    if (id == R.id.menu_log)               <-R.id.menu_log - xml에 정의된 item Id 를 적으면 됩니다.
    {
        Toast.makeText(getApplicationContext(),"로그 정보 클릭...",Toast.LENGTH_SHORT).show();
    }
    return super.onOptionsItemSelected(menuItem);
}

반응형
반응형

*  Activity 화면 고정 

- Activity 에서 onCreate 함수 안에

 아래의 그림과 같이 세로 모드 또는 가로 모드 를 써 줍니다.

 

 

반응형

+ Recent posts