StratoSphere Stream

if로 체크하는 방법 보다는 더 진보적인 거 같아서(GCP에서 에러도 안나고) 메모할겸 적는다.


1
2
3
4
5
6
7
8
9
10
11
12
13
let checkStus = {
  'numbers'0,
  'value'0
};
 
if (checkStus.hasOwnProperty('number')) {
  //있다면
  console.log(true)
 
else {
  //없다면
  console.log(false)
}
cs


Comment : 0

사람들은 하나씩 빼먹고 설명을 하는데(나도 그렇지만) 이건 꼭 써야 할거같아서 쓴다.


accountRepository.save(Account.builder() 이런식으로 쓸 경우 builder()가 안뜨는 경우가 있다.


 - 해결방법


    compileOnly('org.projectlombok:lombok')


당연하지만 lombok은 추가해야 한다.


우선 lombok이 있는 위치로 간다

나의 경우는


C:\Users\ACID\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.16.22\e555426550f54284fefb09065f2123a1d9be0b73


였다. lombok-1.16.22.jar 이라는 파일이 있을것이다. 버전은 다르지만 대략 저런 파일이다.


이제 CMD를 관리자권한으로 실행[각주:1]해서


C:\Users\ACID\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.16.22\e555426550f54284fefb09065f2123a1d9be0b73


위치로 간다 명령어는



cd C:\Users\ACID\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.16.22\e555426550f54284fefb09065f2123a1d9be0b73


이런식이다. cd + 탐색기에서 복사한 위치로 가면 된다.


그리고나서



 java -jar lombok-1.16.22.jar


이렇게 실행을 한다. 실행하면



이런 화면이 뜨는데 자동으로 추가되지만 안될경우는

Specify location을 눌러서



STS.exe파일을 찾아서 실행하면 된다.


제대로 되면 Successful 글자가 어딘가 나올거고 STS.ini파일에 적당히 추가된 것이 보인다.


-vmargs
-javaagent:C:\Program Files\STS\sts-Springboot\sts-3.9.6.RELEASE\lombok.jar


대충 이런거


이렇게 해서 Builder()가 정상적으로 작동을 할 것이다.


  1. 가끔 나같이 program 폴더에 넣으면 수정시 관리자 권한이 필요하다. [본문으로]

Comment : 0


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  Date date = new Date();
    long dateLongTime = date.getTime();
    //Date함수를 사용한 long time 구하기
    System.out.println(dateLongTime);
 
    //System을 사용한 long time 구하기
    long dateLongTime2 = System.currentTimeMillis();
    System.out.println(dateLongTime2);
 
    //Calander함수를 이용한
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",Locale.KOREA);
    // 날자를 set 하는 방법 (달은 0에서 시작한다)
    cal.set(2000,0,1);
    //SimpleDateFormat을 사용한 날짜 String
    System.out.println("현재날자 : " +sdf.format(cal.getTime()));
 
    //년월일 구하는 방법
    System.out.println("년 : " +cal.get(Calendar.YEAR));
    System.out.println("월 : " +cal.get(Calendar.MONTH));
    System.out.println("일 : " +cal.get(Calendar.DATE));
    System.out.println("요일여부 : " +cal.get(Calendar.DAY_OF_WEEK)); //1: 일요일 , 2: 월요일.. 7: 토요일
    System.out.println("WEEK_OF_YEAR : " +cal.get(Calendar.WEEK_OF_YEAR));// 몇째주 주인가?
    //2000년의 2월의 마지막 날은? => 29일
    System.out.println ("월의 마지막 일자 : " + cal.getActualMaximum ( Calendar.DATE ) );
 
    //1년에 전체 요일과 일요일과 토요일이 그리고 토요일과일요일을은 몇개?
    int allDay = 0;
    int allDayHoliday = 0;
    int allDaySun = 0;
    int allDaySat = 0;
 
    for(int i = 0; i< 12 ; i++){
      cal.set(2000,i,1); //초기 날짜 받음
      int x = cal.getActualMaximum ( Calendar.DATE ); //달의 마지막 날자를 다름 for에서 length로 수정
 
      for(int j = 1; j<= x ; j++){
        cal.set(2000,i,j); //day를 수정해줌
 
        int temp = cal.get(Calendar.DAY_OF_WEEK);
        System.out.println("temp: " + temp);
        if(temp == 1 ){
          allDayHoliday++;
          allDaySun++;
        }
        if(temp == 7 ){
          allDayHoliday++;
          allDaySat++;
        }
        allDay++;
      }
 
    }
    System.out.println("전체: " + allDay); //2000년은 윤년이 있어서 366일이다.
    System.out.println("전체토일: " + allDayHoliday); // 106
    System.out.println("일요일: " + allDaySun); //53
    System.out.println("토요일: " + allDaySat); // 53
cs


'프로그래밍 > JAVA' 카테고리의 다른 글

[자바] Date 함수와 Calender 함수  (0) 2018.10.15

Comment : 0

1. 메니페스토에 인터넷


2. 


package location.techdown.com.simplevideoplayer;

import android.media.AudioManager;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.VideoView;

import java.net.URL;

public class MainActivity extends AppCompatActivity {
Button play;
Button stop;
VideoView videoView;
SeekBar seekBar;
AudioManager maudioManager = null;
TextView textView;

String url = "http://techslides.com/demos/sample-videos/small.mp4";

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

play = findViewById(R.id.play);
stop = findViewById(R.id.stop);
videoView = findViewById(R.id.videoView);
seekBar = findViewById(R.id.seekBar);
textView = findViewById(R.id.textView);

//음량값 받기
maudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
int maxVol = maudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//최대치 값을 가져와서 seekBar Max로 하기
seekBar.setMax(maxVol);
textView.setText("음량최대값: "+ maxVol);


//Seekbar로 음량 변경
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
textView.setText("변환값 "+ i);
//음악 음량 변경
maudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, AudioManager.FLAG_SHOW_UI);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});

MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
//주소변경
videoView.setVideoURI(Uri.parse(url));
videoView.requestFocus();

play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//플레이
videoView.start();
}
});

stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//멈춤
videoView.stopPlayback();
}
});

}
}


응용판으로 Seekbar을 이용해서 음량을 조절할 수 있게 했다.

Comment : 0

1. 메니페스트에 인터넷 권한 승인하기


2. 

package location.techdown.com.sampleaudioplayer;

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Button play;
Button stop;
Button replay;
TextView textView;

static final String bgm = "http://mini-files.thinkpool.com/files/mini/2004/09/14/%EC%BD%94%EC%9A%94%ED%83%9C-%EB%B6%88%EA%BD%83.mp3";
private MediaPlayer mediaPlayer;
private int playbackPosition = 0;

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

play = findViewById(R.id.button);
stop = findViewById(R.id.button2);
replay = findViewById(R.id.button3);
textView = findViewById(R.id.textView);

play.setOnClickListener(this);
stop.setOnClickListener(this);
replay.setOnClickListener(this);


}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button: //play
playAudio(bgm);
Toast.makeText(getApplicationContext(), "재생", Toast.LENGTH_LONG).show();
break;
case R.id.button2: //stop
if (mediaPlayer != null) {
//현재 위치 받기
playbackPosition = mediaPlayer.getCurrentPosition();
mediaPlayer.pause(); //멈춤
Toast.makeText(getApplicationContext(), "일시중지", Toast.LENGTH_LONG).show();
textView.setText("현재위치 : "+playbackPosition);
}
break;
case R.id.button3: //replay
//재생이 있고 재생중이 맞다면 실행
if (mediaPlayer != null && mediaPlayer.isPlaying() == false) {
//재시작을 하면 시작후 seekTo로 중단되었던 포지션으로 이동
mediaPlayer.start(); //시작
mediaPlayer.seekTo(playbackPosition); // 타임 위치로 가기

}
break;

}
}

@Override
protected void onDestroy() {
super.onDestroy();
killAudio();
}

public void playAudio(String url) {
killAudio();
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(url); // 주소 받기
mediaPlayer.prepare(); // 준비
mediaPlayer.start(); //시작
} catch (IOException e) {
e.printStackTrace();
}

}

private void killAudio() {
if (mediaPlayer != null) {
//리소스 해제
mediaPlayer.release();
}
}
}


Comment : 0


컨트롤 알트 S를 눌러서 설정으로 간 다음

Google play Service를 활성화.



컨트롤 알트 쉬프트 에스를 눌러서

프로젝트 구조에서 app -> Dependencies -> +

play-service 로 검색하면 maps달린거 추가. 


메니페스트


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.acid.samplelocation">

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET"/>

<permission
android:name="com.example.acid.samplelocation.permission.MAPS.RECEIVE"
android:protectionLevel="signature" />

<uses-permission android:name="com.example.acid.samplelocation.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICE" />

<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />


<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<uses-library android:name="com.google.android.maps"/>
<meta-data android:name="com.google.android.maps.v2.API_KEY"
android:value="API키를 넣으면 된다."/>

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

구글 Api key는 구글에서 구하면 된다.


layout


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GPS location"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GPS ON"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GPS OFF"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />

<Button
android:id="@+id/buttonMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼" />
</LinearLayout>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>

</LinearLayout>


package com.example.acid.samplelocation;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity {

TextView textView;
Button button;
Button button2;
Button buttonMap;

SupportMapFragment mapFragment;
GoogleMap map;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView1);
button = findViewById(R.id.button);
button2 = findViewById(R.id.button2);

//버튼 맵
buttonMap = findViewById(R.id.buttonMap);

//지도 객체 참조
mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;

//최초 표시 부분
//없으면 지도가 회색으로 나온다.
// 서울역으로
googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(37.555744, 126.970431)));
//지도 Zoom 정도
googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));

}
});

//지도 인식
MapsInitializer.initialize(this);

buttonMap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
requestMylocation();
}
});

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
requestMylocation();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopLocation();
Toast.makeText(getApplicationContext(), "GPS OFF", Toast.LENGTH_LONG).show();
}
});
}



//class가 아닌 pricate 값으로 하나 만든다. remove를 위해서
private LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
showCurrentLocation(latitude, longitude);
}

public void showCurrentLocation(Double getLatitude, Double getLongitude) {
LatLng latLng = new LatLng(getLatitude, getLongitude);
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 17));

//마커로 좌표 찍기
MarkerOptions marker = new MarkerOptions();
//마커에 넣을 정보
//snippet은 subtitle같은 것이다
marker.position(latLng).title("My position").snippet("my position");
//마커를 지도에 표기
map.addMarker(marker).showInfoWindow();

//마커를 누르면 실행되는 것
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(getApplicationContext(), "클릭했음", Toast.LENGTH_LONG).show();
return false;
}
});


}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}
};

LocationManager locationManager = null;

//내 위치 요청
public void requestMylocation() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //LOCATION_SERVICE
Location location = null;
if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { //네트워크가 활성화 되어 있다면
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
} else {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); //마지막에 알려진 위치
}

String getLongitude = "LAST getLongitude : " + location.getLongitude();
String getLatitude = " LAST getLatitude : " + location.getLatitude();
Log.i("Location ", getLongitude + "" + getLatitude);

Double longitude = location.getLongitude();
Double latitude = location.getLatitude();
textView.setText("latitude " + latitude);

Toast.makeText(getApplicationContext(), "GPS", Toast.LENGTH_LONG).show();

long minTime = 10000; // 10초
long minDistance = 0;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, locationListener);


}


//GPS중단
public void stopLocation() {
locationManager.removeUpdates(locationListener);
}


}

주석으로 설명은 달아놓았는데, GPS받는 부분에서 구글 맵 부분이 추가된 형태이다. 



Comment : 0

package com.example.acid.samplelocation;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

TextView textView;
Button button;
Button button2;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView1);
button = findViewById(R.id.button);
button2 = findViewById(R.id.button2);


button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startLocationService();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopLocation();
Toast.makeText(getApplicationContext(), "GPS OFF", Toast.LENGTH_LONG).show();
}
});
}

private LocationListener locationListener = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
textView.setText(latitude + " "+longitude);
Toast.makeText(getApplicationContext(), "onLocationChanged", Toast.LENGTH_LONG).show();

}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}
};

LocationManager locationManager = null;

public void startLocationService() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //LOCATION_SERVICE
Location location = null;
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ //네트워크가 활성화 되어 있다면
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}else{
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); //마지막에 알려진 위치
}

String getLongitude = "LAST getLongitude : " + location.getLongitude();
String getLatitude = " LAST getLatitude : " + location.getLatitude();
Log.i("Location ", getLongitude + "" + getLatitude);

textView.setText(getLongitude + "" + getLatitude);
Toast.makeText(getApplicationContext(), "GPS", Toast.LENGTH_LONG).show();


long minTime = 10000; // 10초
long minDistance = 0;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, locationListener);
}

public void stopLocation(){
locationManager.removeUpdates(locationListener);
}


}

GPS 받고 끊고 


<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

메니페스트에 이거 넣어야 한다. 

Comment : 0

자바스크립트에서 글자를 숫자를 변환해야 할때


1
2
3
4
5
6
7
8
 
1. String을 Int로 변환
parseInt(text) //소수점이었던 String인 경우는 소수점 이하 버림 
1. String을 소수점으로 변환
parseFloat(text)
1. String을 숫자로 변환
Number(text) //보통은 이걸 쓰면 됨
 
cs


Comment : 0

지도 관련해서 사용해야 할 일이 있었다.

GPS상의 좌표(WGS84)를 받아서 TM128(카텍)로 변환하는 방식이다. 오피넷에서 쓰는 좌표로 변환. 


proj4로 TM128에 대한 보정값을 만들어서 변환을 할 수 있다.

주석의 블로그 주소는 각 보정값을 표기한 사이트.


defs로 값을 보정 값을 정의하고, 왼쪽에 정의된 값을 쓰면 작동을 한다. 


result는 Array이므로 result[0] result[1]이렇게 사용하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
//https://rlarltjs776.wordpress.com/2016/02/24/%ED%95%9C%EA%B5%AD-%EC%A3%BC%EC%9A%94-%EC%A2%8C%ED%91%9C%EA%B3%84-epsg%EC%BD%94%EB%93%9C-%EB%B0%8F-proj4-%EC%9D%B8%EC%9E%90-%EC%A0%95%EB%A6%AC/
 
const proj4 = require('proj4');
 
var from = 'WGS84'
var to = 'TM128'
 
proj4.defs('WGS84'"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
proj4.defs('TM128''+proj=tmerc +lat_0=38 +lon_0=128 +k=0.9999 +x_0=400000 +y_0=600000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43');
 
var xy = [127.1415247,37.5283983];
var result = proj4(from, to, xy);
 
console.log(result) // result: [ 324317.673778079, 547700.4604186672 ]
cs




Comment : 0

REF: https://actions-on-google.github.io/actions-on-google-nodejs/classes/dialogflow.dialogflowconversation.html


지역정보를 얻을려면 권한이 필요하다.

 아래의 코드를 쓴다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
app.intent(ALLROUND_INTENT, (conv, confirmationGranted) => {
  conv.data.fallbackCount = 0;
  console.log("confirmationGranted: ", confirmationGranted)
  if (Object.keys(confirmationGranted).length === 0) { //권한 없으면
 
    //https://developers.google.com/actions/assistant/helpers
    //위치 퍼미션 받는 intent
 
    // Choose one or more supported permissions to request:
    // NAME, DEVICE_PRECISE_LOCATION, DEVICE_COARSE_LOCATION
    const options = {
      context: '이름과 지역정보가 필요합니다.',
      // Ask for more than one permission. User can authorize all or none.
      permissions: ['NAME''DEVICE_PRECISE_LOCATION'],
    };
    conv.ask(new Permission(options));
 
  } else { // 권한을 얻었다면 작업 시작
    
  }
 
});
Colored by Color Scripter
cs

권한이 필요한 곳에 이렇게 쓴다

권한이 없으면 Permission 작업을 한다. 여기선 이름과 위치정보를 받아온다.

confirmationGranted로 현재권이 있는지없는지 구분을 해준다.




dialogflow에 Yes or No 작업을 넣어주고 또하나의 각 Intent 별로 만들어준다.


1
2
3
4
5
6
7
8
9
10
11
12
//actions_intent_PERMISSION
app.intent(ALLROUND_INTENT_YES, (conv, confirmationGranted) => {
  conv.data.fallbackCount = 0;
  console.log("confirmationGranted: ", confirmationGranted)
  conv.followup("aroundAll");
});

app.intent(ALLROUND_INTENT_NO, (conv, confirmationGranted) => {
  conv.data.fallbackCount = 0;
  console.log("confirmationGranted: ", confirmationGranted)
  conv.followup("start");
});

cs




Yes Intent 에는 Dialogflow에 actions_intent_PERMISSION 을 이벤트에 넣어준다.


 conv.followup("start"); 이게 궁금할 수 있는데


followup은 바로 넘겨주는 conv 이다. event이름으로 지정된 intent로 돌려버린다.






Comment : 0