- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GPIO
- 리눅스
- GUI
- 메소드
- 쉘 스크립트 기초
- 프로젝트
- Tkinter
- Python
- Linux
- 쉘 스크립트
- 안드로이드
- synology
- Shell script
- 그라파나
- 라즈베리파이
- docker
- System
- Android
- 클라우드
- 자바
- ACL
- 네트워크
- 쉘 스크립트 if문
- nginx
- JSP
- API
- LEVIATHAN
- centos docker
- RaspberryPi
- Java
- Today
- Total
IT창고
안드로이드(Android) API 정리3 본문
안드로이드 스튜디오를 기준으로 작성하였습니다. 정리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);
// }
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 스튜디오 apk 만들기(key생성) (0) | 2017.12.12 |
---|---|
안드로이드 앱 개인정보처리방침 (0) | 2017.12.12 |
안드로이드(Android) API 정리2 (0) | 2017.11.04 |
안드로이드(Android) API 정리1 (0) | 2017.10.28 |
안드로이드(Android) 레이아웃 설정 (0) | 2017.10.23 |