안드로이드

 

 

 

 

 

 

 

 

class MainActivity

 


package com.example.choi.ex04_file;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;



public class MainActivity extends AppCompatActivity {

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


    public void onClick(View v){
        Intent intent=null;
        switch (v.getId()){
            case R.id.button1:
                intent=new Intent(this, ResourceActivity.class);
                break;

            case R.id.button0:
                //현재 화면에서 ListDemo1으로 이동
                intent =new Intent(this, ListDemo1.class);
                break;

            //내장 메모리
            case R.id.button2:
                intent=new Intent(this, ReadWriteActivity.class);
                break;
            //외장 메모리
            case R.id.button3:
                intent=new Intent(this, SdcardActivity.class);
                break;
        }
        startActivity(intent);
    }


}

 

main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.choi.ex04_file.MainActivity">

    <Button
        android:text="ListActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button0"
        android:onClick="onClick"
        />


    <Button
        android:text="리소스 파일 읽기"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button1"
        android:onClick="onClick"
        android:layout_marginTop="11dp"
        android:layout_below="@+id/button0"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:text="파일 입출력(내장 메모리)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:onClick="onClick"
        android:layout_marginTop="18dp"
        android:layout_below="@+id/button1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"

        />

    <Button
        android:text="파일입출력(외장메모리)"
        android:onClick="onClick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="19dp"
        android:id="@+id/button3" />

</RelativeLayout>






 

 

 

 

class SdcardActivity
package com.example.choi.ex04_file;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;


public class SdcardActivity extends AppCompatActivity {

    //1.변수 선언
    Button btnSave, btnLoad, btnDelete;
    EditText edit1;
    String path;  //sdcard 의 경로


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

        //2. 위젯 연결
        btnSave=(Button)findViewById(R.id.btnSave);
        btnLoad=(Button)findViewById(R.id.btnLoad);
        btnDelete=(Button)findViewById(R.id.btnDelete);
        edit1=(EditText)findViewById(R.id.edit1);

        //sdcard의 절대 경로(안드로이드 버전, 제조사마다 디렉토리가 다름)
        path = Environment.getExternalStorageDirectory().getAbsolutePath();

        //아래 처럼 절대 경로로 하면 안된다. 기기만다 다르기 때문에 위처럼 해야 한다.
        //path="/storage/emulated/0/";


        //3. 저장 버튼 클릭
        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                check();
            }
        });

    }

    //사용권한 체크 (Minimum SDK vesrion 을 23 으로 설정 )
    void check(){
        //권한 검사(AndroidManifest.xml) , 사용자의  동의 여부
        if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED  ||
                checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED
           )
        {
            //권한 설정이 왜 필요한지 사용자에게 안내문 출력(선택적인 옵션)
            if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
                Toast.makeText(this, "외부메모리에 읽기/쓰기 권한이 필요합니다.", Toast.LENGTH_LONG).show();
            }
            //팝업
            //requestPermissions("사용권한 배열", 요청코드)
            // 요청코드는 임의의 값 사용 가능
            requestPermissions(new String[]{
                   Manifest.permission.READ_EXTERNAL_STORAGE,
                   Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }else{
            // 동의한 상태 => save()
            save();
        }
        // 동의하지 않은 상태
        //팝업
    }

    //사용자의 사용권한 동의 여부가 전달
    //int requestCode - 요청코드
    //String[] permissions - 요청권한 배열
    //int[] grantResults - 권한 수락 여부 배열
    @Override
    public void onRequestPermissionsResult(int requestCode,
                  @NonNull String[] permissions, @NonNull int[] grantResults) {

            switch (requestCode){
                case 1: //요청코드
                     if(grantResults.length > 0 &&
                             grantResults[0]==PackageManager.PERMISSION_GRANTED &&
                             grantResults[1]==PackageManager.PERMISSION_GRANTED
                       ){
                        save();
                    }else{
                        Toast.makeText(this, "더이상 외부메모리를 사용할 수 없습니다.",
                                Toast.LENGTH_LONG).show();
                    }
            }
    }




    void save(){
        //외부메모리의 경로  내장 메모리 저장할 때의 코드작성과 같다. 차이는 path
        File file=new File(path+"/test.txt");
        try{
            FileOutputStream fos =new FileOutputStream(file);
            String str =edit1.getText().toString();
            fos.write(str.getBytes());
            fos.close();//스트림 닫기
            Toast.makeText(this, "저장되었습니다.", Toast.LENGTH_LONG).show();
        }catch (Exception e){
            e.printStackTrace();
        }
    }




}

 

read_write.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/read_write"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.choi.ex04_file.ReadWriteActivity">

    <Button
        android:text="저장"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/btnSave" />

    <Button
        android:text="불러오기"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/btnLoad" />

    <Button
        android:text="삭제"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:id="@+id/btnDelete" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/edit1"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/btnSave" />

</RelativeLayout>

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

먹지 못할 풀이 오월에 겨우 나온다 , 되지 못한 주제에 거레는 퍽 한다는 말.

댓글 ( 4)

댓글 남기기

작성