관리 메뉴

IT창고

안드로이드(Android) API 정리3 본문

프로그래밍/Android

안드로이드(Android) API 정리3

방구석여포 2017. 11. 14. 16:16

안드로이드 스튜디오를 기준으로 작성하였습니다. 정리2에 이어서 어플개발에 꼭 필요할 부분을 정리하였습니다.


1. SD카드 및 내장메모리

SD카드에 데이터를 저장하기 위해서는 Manifast파일에 권한을 설정해야합니다. ex) WRITE_EXTERNAL_STORAGE


파일저장하기

private void save(){

        String save = "저장된 문자";

        String folderName = "myTest";


        String path = Environment.getExternalStorageDirectory().getAbsolutePath(); //내부저장소 루트 폴더


        path = path + "/" + folderName;


        File file = new File(path);


        if(!file.exists()){

            file.mkdirs(); //폴더가 없으면 만들어준다

        }


        file = new File(path + "/gsk.txt");  //저장할 파일 이름


        try{

            FileOutputStream fos = new FileOutputStream(file);

            fos.write(save.getBytes());

            fos.close();

        }catch (FileNotFoundException e){

            //에러 발생

            e.printStackTrace();

        }catch (IOException e){

            e.printStackTrace();

        }

    }


파일불러오기

String str, str2;

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test/gsk.txt";


try{

FileInputStream fis = new FileInputStream(path); //파일의 경로

ByfferdReader byfferReader = new BufferedReader(new InputStreamReader(fis));


while((str = bufferReader.readLine()) != null  //str에서 txt파일의 한 라인을 읽어온다

str2 += str;

}catch(IOException e){

e.printStackTrace();

}


2. SQLite

SQLite는 안드로이드 내부에 기본적으로 탑재되어있는 DB로 로컬DB이므로 앱이나 테이터가 삭제되면 데이터가 같이 삭제됩니다.

@SuppressLint("WrongConstant")

    private void init(){

        SQLiteDatabase db;

        db = openOrCreateDatabase("myDb.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);


        db.execSQL("create table IF NOT EXISTS my_date (" +

                "idx INTEGER PRIMARY KEY AUTOINCREMENT," +

                "name TEXT," +

                "age INTEGER," +

                "address TEXT);"

        );


        Cursor c =db.rawQuery("SELECT * From my_date",null);

        Log.d("heu","count: "+ c.getCount());


        c.moveToFirst();

        while (c.isAfterLast() == false) {

            int curIdx = c.getInt(0);

            String curName = c.getString(1);

            int curAge = c.getInt(2);

            String curAddr = c.getString(3);


            Log.d("heu", "idx: " + curIdx + ", name: " + curName + ", age: " + curAge + ", address: " + curAddr);

            c.moveToNext();

        }


        c.close();



        db.execSQL("INSERT INTO my_date(name, age, address) VALUES ('김씨','20','지구')");

        db.execSQL("INSERT INTO my_date(name, age, address) VALUES ('권씨','30','달')");

        db.execSQL("INSERT INTO my_date(name, age, address) VALUES ('엄씨','40','태양')");


        db.execSQL("UPDATE my_date SET name = 'gsk' WHERE idx = 2;"); //수정하는법 idx2줄 수정


        db.execSQL("DELETE FROM my_date WHERE idx = 3;"); //삭제하는 법 idx3줄 삭제


        db.close();

    }


3. ListView, GridView

리스트뷰와 그리드뷰는 커스텀 리스트와 커스텀그리드 뷰를 구현할수있습니다

xml에서 리스트뷰를 적용하고 따로 xml을 만들어 커스텀 리스트뷰로 만듭니다.

리스트와 그리드뷰는 어답터를 사용해야합니다.

리스트뷰 

ArrayList<String> arr = new ArrayList<>();


ListView listV;


listV = (ListView)findViewById(R.id.listV);


        for(int i=0; i<20; i++){

            arr.add("gskgsk"+i);

        }


        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,arr);

        listV.setAdapter(adapter);


implements AdapterView.OnItemClickListener


@Override

    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        Log.d("heu","selected Item: "+ arr.get(i));



    }


4. JSON

Json은 특정 규칙에 따라 문자열을 자르는 방식입니다 변수나 배열 같은것을 문자로 표현하기엔 어렵기에 json의 방식으로 사용하면 편리합니다

String jsonObj = "{\"name\":\"김씨\",\"nickname\":\"금광\"}";

        String jsonObj2 = "{\"name\":\"권씨\",\"nickname\":\"권력\"}";

        String jsonObj3 = "{\"name\":\"엄씨\",\"nickname\":\"엄함\"}";


        String jsonArr = "["+jsonObj2+","+jsonObj3+","+ jsonObj+"]";

        try {

            /** JsonObject 사용방법 **/

            JSONObject jObj = new JSONObject(jsonObj);

            Log.d("heu","name: "+jObj.getString("name"));

            Log.d("heu","nickname: "+jObj.getString("nickname"));


            JSONArray jArr = new JSONArray(jsonArr);

            for (int i = 0; i < jArr.length(); i++) {

//                String value = jArr.getString(i);

                JSONObject tempObj = jArr.getJSONObject(i);

                Log.d("heu","value: "+ tempObj.getString("name"));

            }


        } catch (JSONException e) {

            e.printStackTrace();

        }



5. datepicker

datePicker = (DatePicker)findViewById(R.id.datePicker);


datePicker.init(datePicker.getYear(),

                datePicker.getMonth(),

                datePicker.getDayOfMonth(),

                new DatePicker.OnDateChangedListener() {

                    @Override

                    public void onDateChanged(DatePicker datePicker, int i, int i1, int i2) {

                        Log.d("heu",i+"/"+i1+"/"+i2);

                        MainActivity.this.i2 = i2;

                        handler.removeMessages(0);

                        handler.sendEmptyMessageDelayed(0, 1000);

                    }

                });



6. VideoView

VideoView videoV;

SeekBar seekBar;


/** 기본 미디어 컨트롤러 **/

//        MediaController mc = new MediaController(this);

//        videoV.setMediaController(mc);


/** 커스텀 컨트롤러 **/

 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override

            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {


            }


            @Override

            public void onStartTrackingTouch(SeekBar seekBar) {


            }


            @Override

            public void onStopTrackingTouch(SeekBar seekBar) {

                int cur = seekBar.getProgress();

                videoV.seekTo(cur*1000);

            }

        });


        /** 기본 미디어 컨트롤러를 안씀 **/

//        MediaController mc = new MediaController(this);

//        videoV.setMediaController(mc);


        chkPermission();



        findViewById(R.id.playBt).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                videoV.start();

            }

        });


        findViewById(R.id.pauseBt).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                videoV.pause();

            }

        });


        findViewById(R.id.stopBt).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                videoV.pause();

                videoV.seekTo(0);

            }

        });


        findViewById(R.id.moveBt).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                videoV.seekTo(7110);

            }

        });


    }


    private void chkPermission() {

        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);


        if (permissionCheck == PackageManager.PERMISSION_DENIED) {

            ActivityCompat.requestPermissions(this,

                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},

                    2000);

        } else {

            /** SD 및 내부저장소에서 동영상가져오기  **/

//            String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/download/test.mp4";

//            videoV.setVideoPath(path);


            /**  인터넷에서 동영상 가져오기  단 권한설정을 해야한다 마시멜로우이상부터는 추가 설정  **/

            Uri uri = Uri.parse("http://www.ithinknext.com/mydata/board/files/F201308021823010.mp4");

            videoV.setVideoURI(uri);

            videoV.requestFocus();


            handler.sendEmptyMessage(0);

        }

    }


    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == 2000) {

            if (grantResults.length > 0

                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

//                String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/download/test.mp4";

//                videoV.setVideoPath(path);


                Uri uri = Uri.parse("http://www.ithinknext.com/mydata/board/files/F201308021823010.mp4");

                videoV.setVideoURI(uri);

                videoV.requestFocus();


                handler.sendEmptyMessage(0);


            } else {

                // 거부


            }

        }

    }


    Handler handler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

            super.handleMessage(msg);

            Log.d("heu", "cur: " + videoV.getCurrentPosition() / 1000 + "/" + videoV.getDuration() / 1000);

            seekBar.setMax(videoV.getDuration() / 1000);

            seekBar.setProgress(videoV.getCurrentPosition() / 1000);


            handler.sendEmptyMessageDelayed(0, 1000);

        }

    };

//

//    @Override

//    protected void onDestroy() {

//        super.onDestroy();

//        handler.removeMessages(0);

//    }

Comments