IONIC 백버튼 관련하여 얘기해보려합니다.

 

각 페이지 별로 백버튼을 subscribe 할수도 있겠지만

 

필자의경우 app.component에서 다 처리하는 편입니다.

로직은 아래와 같으며, 홈화면에서 다른 화면이동시 백키동작이 됩니다.

 

기본 안드로이드 Back Key 처리로직

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Platform, ToastController } from '@ionic/angular';

declare var window: any;

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent {
  private  backPressCount = 0;  // 백버튼 카운트


  constructor(
    private router: Router,
    private platform: Platform,
    private toastCtrl: ToastController

  ) {
    this.platform.backButton.subscribeWithPriority(1, () => { // to disable hardware back button on whole app
      console.log("백버튼 호출");
      window.history.back();
    });
  }

위의 로직에서

 

추가적으로 홈화면에서 앱종료를 시켜주고 싶을땐

우선 선행작업이 필요합니다.

1.

npm i cordova-plugin-exit

위 명령어를 콘솔창에 입력하여 모듈을 import 해야합니다.

 

cordova-plugin-exit

Cordova plugin for exiting the app programmatically for Android, iOS and WP

www.npmjs.com

2.

로직을 입력합니다.

안드로이드 백키 앱종료 로직

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Platform, ToastController } from '@ionic/angular';

declare var window: any;

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent {
  private  backPressCount = 0;  // 백버튼 카운트


  constructor(
    private router: Router,
    private platform: Platform,
    private toastCtrl: ToastController

  ) {

    this.platform.backButton.subscribeWithPriority(1, () => { // to disable hardware back button on whole app
      console.log("백버튼 호출");
      if (this.router.url === '/home') {
        if (this.backPressCount > 0) {
          window.cordova.plugins.exit();
        } else {
          this.backPressCount++;
          this.presentToast('한번 더 누르시면 App이 종료됩니다.');
          setTimeout(() => {
            this.backPressCount = 0;
          }, 5000);
        }
      } else{
          window.history.back();
      }
    });

  }

  async presentToast(str) {
    const toast = await this.toastCtrl.create({
      message: str,
      duration: 5000
    });
    toast.present();
  }
}

*참고사항 

아이오닉 자체 오류인 것같은데 앱 실행시 즉각적으로 백키로직이 동작되지는 않습니다... 

다른화면으로 이동하면 그때 적용됩니다... 왜 그런지는 저도 찾아보고있습니다...

아시는분은 댓글좀....

 

 

추가적으로 백키 방지로직 공유드립니다.

안드로이드 백키 방지 로직(매우 간단합니다 로직처리를 안하면됩니다.)

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Platform, ToastController } from '@ionic/angular';


declare var window: any;

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent {
  private  backPressCount = 0;  // 백버튼 카운트

  constructor(
    private router: Router,
    private platform: Platform,
    private toastCtrl: ToastController

  ) {
    this.platform.backButton.subscribeWithPriority(1, () => { // to disable hardware back button on whole app
      console.log("백버튼 호출");
      if (this.router.url === '/home') {
        if (this.backPressCount > 0) {
          window.cordova.plugins.exit();
        } else {
          this.backPressCount++;
          
          setTimeout(() => {
            this.backPressCount = 0;
          }, 5000);
        }
      } 
      else{
        // 로직 처리를 안하면 백키가 동작되지 않습니다.
        // 이곳에 전역적으로 사용하는 boolean값을 추가하여 백키동작을 컨트롤 하시면되겠습니다.
        // (ex)
        // if(isBackKeyBlock) {
        //   window.history.back();
        // }
      }
    });
  }

  async presentToast(str) {
    const toast = await this.toastCtrl.create({
      message: str,
      duration: 5000
    });
    toast.present();
  }
}

 

728x90
반응형

'IONIC' 카테고리의 다른 글

npm 설치시 터미널 이슈  (0) 2021.09.01

변수는 알아봤으니 국룰로 다음은 배열을 알아봐야겠지요.

 

배열 2.1

배열도 자바와 거의 비슷합니다.

변수명을 앞에 선언하고 타입을 뒤에다 선언하시면 되겠습니다.

 

let strArr:string[] = ["가",'나','다','라','마','바'];

let numArr:number[] = [1,2,3,4,5,6,7,8];

let boolArr:boolean[] = [true,false,true,false];

let anyArr:any[] = ["가",1,true,"나",2,false];

 

관련API

배열 또한 모질라 html 가이드 문서가 넘나 잘되어있어서 링크만 붙이겠습니다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array

 

Array - JavaScript | MDN

JavaScript Array 전역 객체는 배열을 생성할 때 사용하는 리스트 형태의 고수준 객체입니다.

developer.mozilla.org

 

728x90
반응형

'IONIC > TypeScript' 카테고리의 다른 글

TypeScript 기초#1  (0) 2021.10.21

간단하게 타입스크립트 기초를 쓰려고합니다.

 

저는 자바개발자였기때문에 자바개발자기반으로 설명 하도록 하겠습니다.

 

1.1 변수

타입스크립트는 거의 자바와 동일합니다.

  • int -> number
  • String -> string
  • boolean -> boolean

이렇게 쓰고 있습니다.

보통 쓰는 타입들은 

  • String : 문자열
  • number : 숫자
  • boolean : true, false (참 혹은 거짓)
  • any : 모든 타입과 호환됩니다.(자바에서 Object객체같기도...)

참고사항

타입스크립트는 자바스크립트와 비슷하게 var, const, let이 있습니다.

간단하게 const는 상수로 보시면 되고 var와 let이 비슷한데 

보통 저같은경우에는 let을 씁니다.

아래 코드를 보시면 조금은 이해되실수도...

var a = 1;
let b = 1;
test();
test1();

function test(){
  // 결과값이 3으로 노출
   var a =2;
   var a =3;
   console.log(a);
}

function test1(){
  // 오류를 발산
  let b =2;
  let b =3;
  console.log(b);
}

간단히 설명 드리자면

var는 test()메서드 안에 여러번 같은 변수를 선언해도 오류가 나지 않습니다.

let은 test1()메서드 안에 여러번 같은 변수를 선언하면 IDE에서 오류를 노출시킵니다.(자바와 거의 동일하죠)

 

사용 예

let num:number = 10;
let str:string = "하이";
let bool:boolean = true;

// any의 경우 안의 내용에 따라 타입이 정해집니다.
let anyString:any = "안의 내용의 따라 타입이 정해집니다.";
let anyNumber:any = "20";
let anyBool:any = true;

솔직히 any 저는 좋았습니다. 특히 공통으로 쓸 메서드 만들거나 모듈을 만들때 넘나 좋아요~!

 

변수 API 

솔직히 제가 설명할 필요없이 파이어폭스(모질라)에서 만든 html 가이드가 넘나 잘 되어있어서

관련 링크만 붙이겠습니다.

 

number관련 API

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number

 

Number - JavaScript | MDN

Number 객체는 숫자 값으로 작업할 수 있게 해주는 래퍼(wrapper) 객체입니다. Number 객체는 Number() 생성자를 사용하여 만듭니다. 원시 숫자 자료형은 Number() 함수를 사용해 생성합니다.

developer.mozilla.org

string 관련 API

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String

 

String - JavaScript | MDN

String 전역 객체는 문자열(문자의 나열)의 생성자입니다.

developer.mozilla.org

boolean 관련 API

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean

 

Boolean - JavaScript | MDN

Boolean 객체는 불리언 값을 감싸고 있는 객체입니다.

developer.mozilla.org

그 외에도 Date, JSON을 조금 보시는 걸 추천합니다.

 

728x90
반응형

'IONIC > TypeScript' 카테고리의 다른 글

TypeScript#2  (0) 2021.10.21

문제

맥북을 쓰다보면 포맷을 할때가 있다.

 

그럴때는 새로 환경설정을 해줘야하는데 이게 참 골치가 아프다.

 

(구글링 해보니 .profile해주면 된다는 데 맥OS 카탈리나 이상은 안된다.)

 

node.js를 설치 후에

"npm -v", "node -v" 하면 버전정보가 잘 보인다.

 

npm i -g OOO 이라고 써보면 해당 터미널에서는 잘 설치되었지만 

명령어를 입력해보면 아래와 같이 나온다.

 

zsh: command not found:OOO

 

 

해결방법(맥북 OS 카탈리나 이상만)

아래 순서대로 터미널에 입력해보자

mkdir ~/.npm-global

 

npm config set prefix '~/.npm-global'

 

nano ~/.zprofile

 

// (편집기에서 아래 내용을 그대로 추가 후 저장)
export PATH=~/.npm-global/bin:$PATH

contorl + o  // 저장

control + x  // 편집기 종료

(확인사항)
// nano ~/.zprofile  명령어 입력시 A-1 이미지 처럼 나오면 성공
// control + x 키를 눌러 빠져나오자
A-1

 

// 마지막 설정을 저장해주면 된다.
source ~/.profile

 

 

자 이제 맥북을 껏다가 켜도, 새로운 터미널을 켜도

설치된 모듈 버전을 가져오는 것을 볼수 있다.

728x90
반응형

'IONIC' 카테고리의 다른 글

IONIC 백버튼  (0) 2021.10.24

안드로이드 소스를 비교하는 방법에 대해 설명드리도록 하겠습니다.

 

 

우선 프로젝트를 먼저 실행해 줍니다.

 

저는 예시로 OldProject 와 NewProject를 소스를 비교할겁니다.

 

1. OldProject를 안드로이드 스튜디오로 실행 시켜 줍니다.

2. OldProject에서 아래와 그림과 같이 비교할 특정폴더(OldProject/app/main)를 선택합니다.

 

3. 마우스 오른쪽 클릭하여 메뉴를 엽니다.

4. 메뉴 중 Compare With를 선택합니다.

 

5. 비교할 프로젝트의 소스 폴더를 선택후 Open 버튼을 누릅니다.

예시)

OldProject/app/main

NewProject/app/main 선택

 

6. 짜잔~! OldProject/app/main과 NewProject/app/main의 소스파일들이 비교됩니다.

이런식으로

안드로이드 스튜디오에서 비교하면 어떤 소스가 추가 되었는지 또 어떤 소스가 없어졌는지 명확히 알수 있습니다.

 

728x90
반응형

안드로이드 백버튼 두번 누른 후 앱 종료동작


public class MainActivity extends Activity {
private Context mContext = null;
private long backKeyPressedTime = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mContext = this;
}

@Override
public void onBackPressed() {
if (System.currentTimeMillis() > backKeyPressedTime + 2000) {
backKeyPressedTime = System.currentTimeMillis();
Toast.makeText(this, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
return;
}
if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
super.onBackPressed();
}
}



728x90
반응형

아래와 같이 에러가 발생하였을때


ERROR: Unable to find method 'org.gradle.api.tasks.compile.CompileOptions.setBootClasspath(Ljava/lang/String;)V'.

Possible causes for this unexpected error include:

Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)

Re-download dependencies and sync project (requires network)


The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.

Stop Gradle build processes (requires restart)


Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.


In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.



해결방법


Project/gradle/wrapper/gradle-wrapper.properties 파일로 들어가서

5.1.1부분을 4.6이라던지 4.1로 버전을 변경해보시면 정상 빌드 되실겁니다.


그래도 안되시면 

안드로이드 스튜디오를 종료후 재시작 해보시거나

File/Sync Project with Gradle File를 눌러 보시기 발랍니다.




728x90
반응형

안드로이드 특수문자 체크로직은 아래와 같습니다.

private static void 특수문자_테스트() {
// TODO Auto-generated method stub
String str = "ttt";
if(str!=null && str.matches("[0-9|a-z|A-Z|-|-|-| ]*")) {
System.out.println("특수 문자가 없습니다.");
}else {
System.out.println("특수문자가 있습니다.");
}
}

만약 특정 특수문자도 허용하고 싶을경우 아래와 같이 할 수 있습니다.

필자의 경우 앱을 만들때 아래와 같이 체크로직을 만들었다.

private static void 문자열_체크() {
// TODO Auto-generated method stub
String str = "ttt";
if(str!=null && str.matches("[0-9|a-z|A-Z|-|-|-|@\\-\\_\\.\\;\\·\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]*")) {
System.out.println("허용되는 문자열입니다.");
}else {
System.out.println("허용되지 않은 문자열 입니다.");
}
}

유니코드(\u318D\u119E) 를 쓴 이유는 한글의 경우 천지인 키보드의 아래아 ‘·(middle dot)’ 를 이용하기 때문에, 이를 허용하여야 하는데 위의 UniCode 들은 여러 제조사(삼성, LG, 팬택 등)의 단말기들에서 아래아 ‘·(middle dot)’ 표현하는 값이다. 




728x90
반응형

'Java' 카테고리의 다른 글

자바 랜덤  (0) 2017.05.23
java 정렬  (0) 2017.05.23
java 파일용량 계산  (0) 2017.05.23
액티비티 할당된 메모리 즉시 반환하기  (0) 2016.01.12
Java Null Check 코드  (0) 2015.06.29

+ Recent posts