- 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 | 31 |
- 라즈베리파이
- 네트워크
- 프로젝트
- System
- LEVIATHAN
- GPIO
- ACL
- Python
- 리눅스
- RaspberryPi
- 메소드
- JSP
- API
- docker
- centos docker
- 클라우드
- 쉘 스크립트 기초
- 쉘 스크립트 if문
- Linux
- 자바
- 그라파나
- synology
- 안드로이드
- nginx
- Tkinter
- GUI
- Android
- 쉘 스크립트
- Shell script
- Java
- Today
- Total
IT창고
안드로이드(Android) API 정리2 본문
안드로이드 스튜디오를 기준으로 작성했습니다. API 정리1에 이어서 어플개발에 꼭 필요할만한 것들을 정리해보았습니다.
1. 다이얼로그(Dialog)
private void init(){
alert = new AlertDialog.Builder(this);
alert.setTitle("이름");
//alert.setIcon(R.drawable.images); 옆에 그림이미지추가
//alert.setMessage("앱을 종료하는가?");
alert.setCancelable(false);
alert.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
finish();
}
});
alert.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
}
---추가---
@Override
public void onBackPressed() {
// super.onBackPressed(); 다이얼버튼에서 뒤로가기 버튼기능마비
alert.show();
}
2. 라디오 버튼
라디오 버튼은 레이아웃에서 라디오그룹에 감싸고 사용하는것이 좋습니다.
라디오 버튼이 두개있고 다이얼로그를 응용해서 하면 아래와 같이 사용할수있습니다.
1Rb = (RadioButton)findViewById(R.id.1Rb);
2Rb = (RadioButton)findViewById(R.id.2Rb);
init();
findViewById(R.id.btnn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String aaa = "";
if(1Rb.isChecked()){
aaa = "남자";
}else if(2Rb.isChecked()){
aaa = "여자";
}else{
aaa = "성별을 선택해주세요";
}
alert.setMessage(aaa);
alert.show();
}
});
체크박스(CheckBox)도 이와 비슷하게 응용할수있습니다.
3. 프리퍼런스
private void init() {
SharedPreferences preferences = getSharedPreferences("myData", MODE_PRIVATE);
String editsave = preferences.getString("info", "저장된 문장이 없습니다!");
textTv.setText(editsave);
SharedPreferences.Editor editor = preferences.edit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preffer);
textTv = (TextView)findViewById(R.id.texTv);
editTv = (EditText)findViewById(R.id.editTv);
bbtn = (Button)findViewById(R.id.bbtn);
init();
bbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String editsave = editTv.getText().toString().trim();
if (editsave.length() < 1) {
Toast.makeText(prefferActivity.this, "문장을 입력하세요!", Toast.LENGTH_SHORT).show();
} else {
SharedPreferences preferences = getSharedPreferences("myData", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("info", editsave);
editor.commit();
Toast.makeText(prefferActivity.this, "저장 완료 입니다!", Toast.LENGTH_SHORT).show();
editTv.setText("");
}
}
});
4. 터치리스너
클릭리스너와 다르게 터치,무브, 업의 상태를 따로 받을수있으며 사용방법은 클릭리스너와 비슷합니다.
View.OnTouchListener 를 implements 해주고 onTouch메소드를 오바라이드해준후 터치 리스터를 사용하고 싶은 뷰에
setOnTouchListener를 붙여주면 됩니다.
MotionEvent.ACTION_DOWN : 손가락이 닿았을 때
MotionEvent.ACTION_MOVE : 손가락을 드래그 할 때
MotionEvent.ACTION_UP : 손가락을 떼었을 때
단, 실제 휴대폰에서는 하드웨어가 민감하거나 손에 전자파 때문에 조금 다를수있습니다.
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
textTv.setText("Down");
prePosX = (int)motionEvent.getX();
prePosY = (int)motionEvent.getY();
}else if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
//여기서 처리
if(prePosX > motionEvent.getX()){
textTv.setText("왼쪽으로 이동중");
bright++;
if (bright > 99) {
bright = 99;
}
}else if(prePosX < motionEvent.getX()){
textTv.setText("오른쪽 이동중");
bright--;
if (bright < 00) {
bright = 00;
}
}
if(prePosY > motionEvent.getY()){
textTv.setText("위로으로 이동중");
color++;
if (color > 99) {
color = 99;
}
}else if(prePosY < motionEvent.getY()){
textTv.setText("아래로 이동중");
color--;
if (color < 00) {
color = 00; //RGB나 16진수를10진수로 변화하는 옵션 찾기
}
prePosX = (int) motionEvent.getX();
prePosY = (int) motionEvent.getY();
String colorStr = "#"+bright+"0000"+ color; // 여기서 색상과 밝기를 조절
layout.setBackgroundColor(Color.parseColor(colorStr)); // xml에 적용
}
}else if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
textTv.setText("Move posX:"+ (int)motionEvent.getX()+" posY:" + motionEvent.getY()); // 폰으로 사용할경우 사람의손 정전기때문에 다운을보기전에 업으로 바뀐다
}else if(motionEvent.getAction() == MotionEvent.ACTION_UP){
textTv.setText("Up");
}
return true;
}
5. 쓰레드와 핸들러
알아두어야할 부분 - 안드로이드에서 UI에 변화를 줄수있는것은 메인쓰레드뿐이고 쓰레드에서 UI에 변화를 주기위해서는 핸들러를 통해서 UI에 변화를 주어야합니다.
TextView textTv; //변수선언
String str;
int second;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler);
textTv = (TextView)findViewById(R.id.textTv);
Thread th = new Thread(new Runnable() {
@Override
public void run() {
// for (int i = 0; i < 150; i++) {
// for (int j = 0; j < 100; j++) {
// str += i+","+j;
// }
// }
//
// handler.sendEmptyMessage(0); //핸들러호출
handler.sendEmptyMessageDelayed(1,3000); //핸들러 딜레이 호출 앞에 1은 what값으로 id
}
});
th.start();
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
second++;
// textTv.setText("의미 없는 작업 완료"+ second); //핸들러를 사용하지않고 쓰레드에 사용하면 에러난다 오리지날 쓰레드만 사용가능하다
if(msg.what==1){
textTv.setText("최초 호출 의미 없는 작업 완료 " + second);
}else if(msg.what == 0){
textTv.setText("의미 없는 작업 완료 " + second);
}
Log.d("heu","sed: "+second); // 핸들러를 종료시키지않으면 배터리나가버림 해결방법은 와 값을 지정
handler.sendEmptyMessageDelayed(0, 1000);
}
};
@Override
protected void onDestroy() { //이 작업안하면 마켓이나 스토어에 올리면 욕먹습니다!
super.onDestroy();
handler.removeMessages(0); //폰 메모리 안잡아먹도록 꺼주기
}
6. 프로그래스바
프로그래스바에는 막대형과 원형이있는데 원형은 금방끝나는 작업 혹은 진행이 언제끝날지 모를작업에 사용하고 막대형은 오래걸리는 작업 혹은 진행정도를 알수있는 작업에 사용합니다.
막대형을 살펴보면 전체길이를 설정시에는 레이아웃에서 max속성으로 설정이 가능합니다.
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int curNum = progressBar.getProgress();
curNum += 10;
progressBar.setProgress(curNum);
if (curNum < 100) {
handler.sendEmptyMessageDelayed(0, 1000);
}
}
};
progressBar = (ProgressBar) findViewById(R.id.progressBar);
handler.sendEmptyMessageDelayed(0,1000);
7. 권한설정
미시멜로우 이전 버전이면 AndroidManifest.xml에서 권한을 설정하면 됩니다.
ex)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
버전이 마시멜로우 이상이라면 따로 권한을 설정해주어야합니다. JAVA
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 + "/heu.txt"); //저장할 파일 이름
try{
FileOutputStream fos = new FileOutputStream(file);
fos.write(save.getBytes());
fos.close();
}catch (FileNotFoundException e){
//에러 발생
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_storgg);
save();
chkPermission(); //마시멜로우이상 버전 권한설정
}
final int PERMISSION_REQUEST =2000; //임시설정
private void chkPermission(){
int permissionCheck = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(permissionCheck == PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case PERMISSION_REQUEST:
if(grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
//허가
save();
}else{
//거부
}
}
}
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 스튜디오 apk 만들기(key생성) (0) | 2017.12.12 |
---|---|
안드로이드 앱 개인정보처리방침 (0) | 2017.12.12 |
안드로이드(Android) API 정리3 (0) | 2017.11.14 |
안드로이드(Android) API 정리1 (0) | 2017.10.28 |
안드로이드(Android) 레이아웃 설정 (0) | 2017.10.23 |