라벨이 Android인 게시물 표시

주식 자동매매 시스템

파이썬을 이용한 주식 자동매매 시스템

이미지
파이썬을 이용한 주식 자동매매 시스템 INDEX 환경구축 키움증권 API - 연결테스트 키움증권 API - 계좌정보 조회 키움증권 API - 주문 키움증권 API - 종목정보 가져오기 포트폴리오 - 종목, 업종별 자산 포트폴리오 한국투자증권 API API reference 키움 OpenAPI+ 개발가이드 한국투자증권 OpenAPI 다운로드 및 가이드 Design https://www.design-seeds.com/in-nature/succulents/cacti-color-2/ https://create.piktochart.com/dashboard

안드로이드 아키텍쳐

이미지
안드로이드 앱을 개발을 위해 참고하기 좋은 아키텍쳐 샘플들을 모아둔 github이다.    https://github.com/android/architecture-samples Android Studio에서 sample을 실행시키기 위해서는, git clone 후 branch를 이동해 root directory를 오픈하면된다. MVP , MVVM architecture를 기반으로한 다양한 아키텍쳐 sample들이 있다. usecases b ranch usecases branch에는, Kotlin으로 작성된 architecture sample들이 있다. ViewModel LiveData Data Binding Navigation Room

[Android] Tablayout에서 Fragment로 Google Map 사용방법

Tablayout > 3개의 Fragment를 Tab을 누를 때마다 이동하게 만든다 먼저 MainActivity에서는 Tablayout와 ViewPager를 통해 3개의 Fragment가 생성될 수 있도록 한다. MainActivity / activity_main.xml  activity_main.xml <?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="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <android.support.design.widget.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" app:tabGravity="fill" app:tabIndicatorColor="@color/colorIndicator" app:tabMode="fixed" app:tabSelectedTextColor="@col

[Android] AsyncTask

AnsyncTask는 UI Thread를 조금 더 쉽게 이용할 수 있도록 해주는 Class이다. 이 클래스를 사용하면 Thread나 Handler를 사용하지 않고도 UI Thread에서 백그라운드 작업을 수행하고 UI를 변경할 수 있다. android.os.AsyncTask<params, progress, result> <params, progress, result> 3개의 Generic type으로 정의한다. params : Task를 실행시킬 때 넣어주는 parameter type progress : 진행중에 사용되는 type result : 결과로 return 되는 type AsyncTask 를 상속받아 클래스를 생성해, 백그라운드에서 할 작업을 구현한다. class MyTask extends AsyncTask< String , String, Void> { } doInBackground() <params, , > 값은 doInBackground()의 parameter type이며, 배열로 전달된다. < , , result > 값은 doInBackground()의 return type이다. class MyTask extends AsyncTask< String , String, Void> {     @Override    protected Void doInBackground( String ... strings) { return null; } } onPreExecute() doInBackground() 함수의 실행 전에 호출된다. @Override protected void onPreExecute() {     super.onPreExecute(); } onPostExecute() doInBackground() 함수가 끝나고 실행되는 함수이다. result의 type은 doInBackground() 함

[Android] Service

이미지
 서비스 (Service)  화면 없이 백그라운드에서 실행되는 프로세스를 의미한다. Service를 상속받는 Calss를 생성한다 Class 생성 후 우클릭 > Generate > Override 를 통해 필요한 함수들을 구현한다. Service 시작하기 MainActivity에서 Service로 데이터 전달하기 위해서는  putExtra()를 이용한다. // Service class의 class를 Intent로 생성한다 intent = new Intent(this, ServiceSleep.class); // key - value 로 값을 저장해 전달할 수도 있다 intent.putExtra("comman", "show"); // Service를 시작한다 startService(intent); Service Class 내에서  onStartCommand 를 통해 전달 받은 Intent를 처리한다. getStringExtra("KEY") 와 같은 함수로 값을 가져온다. @Override public int onStartCommand(Intent intent, int flags, int startId) {     if (intent == null) {         return Service.START_STICKY;     } else { // Intent 처리 MainActivity에서 "command"라는 이름으로 // 데이터를 저장했기 때문에 가져올 때도 "command"로 가져오면된다. intent.getStringExtra("command");     }     return super.onStartCommand(intent, flags, startId); } onDestroy에서 Service를 종료시켜줘야 한다. stopService(intent)

[Android] GoogleMaps API 사용방법

이미지
프로젝트 생성 Android studio에서 project를 생성한다. Activity 선택 화면에서 Google Maps Activity를 선택한다. permission설정과, 인증 Key 설정 코드를 추가해야한다. app\src\main\AndroidManifest.xml   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>   <uses-permission android:name="android.permission.INTERNET"/> res\values\google_maps_api.xml <!-- YOUR KEY에 KEY를 추가해준다 --> <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">YOUR KEY</string> SHA1 KEY 생성 Path 에 java path 추가  path를 추가하면 keytool 명령을 사용할 수 있다  # C:\Users\student\.android 위치에서 cmd 창을 실행한다 > keytool -list -v -keystore debug.keystore -storepass android -keypass android  # Key가 생성됌  인증서 지문:  SHA1: D8:A3:7B:10:4C:AE:13:E5:CC:A8:E6:61:5B:F7:0A:5B:4A:3B:F6:77  SHA256: D1:D1:06:36:4C:41:E7:63:E3:12:13:62:1D:53:DE:67:30:02:2E:EF:82:B1:B2:BC:11:1C:97:66:0A:DF:6C:E0 서명 알고리즘 이름: SHA1withRSA 주체 공용 키 알

[Android] Web과 App의 연동

javascript에서 App에 있는 함수를 호출하기 위해서는 함수에 아래와 같은 Annotation이 있어야한다. @android.webkit.JavascriptInterface  webView에 사용할 인터페이스를 설정해야한다. JS라는 클래스를 사용하고, HTML에서 "js"라는 이름으로 호출 하겠다는 설정을 해준다. webView.addJavascriptInterface(new JS(), "js"); final class JS { JS() { } @android.webkit.JavascriptInterface public void clickJS(String a) { textView.setText(a); Log.d("[35]", "Event process........... " + a); } } Web에서 window.js로 App 함수 호출하는 방법 <!-- HTML5 --> <button onclick = "window.js.clickJS('Web message')">Android Call</button> App에서 Web에 있는 javascript 함수를 호출하는 방법 // 오류 발생하는 경우 // webView 는 새로운 Thread에서 실행시킬 수 없다. // 아래와 같이 새로운 Thread를 생성하면 오류가 발생한다. // All WebView methods must be called on the same thread.    public void clickBt(View v) {              new Thread(                     new Runnable() {                         @Override                        publ

[Android] 화면전환

Android 화면 전환하는 다양한 방법 화면을 전환하는 방법에는 Intent를 사용해 Activity 전환을 하는 방법, InflaterLayout을 사용해 Activity안에있는 layout을 전환하는 방법, Fragment를 사용하는 방법이있다. Intent //P260 Intent intent = new Intent(getApplicationContext(), SecondActivity.class); intent.putExtra("num1", 1000); startActivityForResult(intent, 100); InflaterLayout Activity를 상속받은 Class에서만 getSystemService() 를 호출할 수 있다. 다른 클래스에서는 Activity에서 생성될 때 context를 넘겨줘야 한다. static LinearLayout container; LayoutInflater inflater; inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.serve, container, true); FrameLayout FrameLayout안에 LinearLayout을 여러 개 추가해서 visible, invisible 방식으로 레이아웃을 관리한다. Fragment // Fragment를 만들 때는 Fragment를 상속받아서 만든다 public static class MainFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // mainlayout을 container 에 붙인다

[Android] Activity lifecycle

이미지
Activity Lifecycle onCreate(Bundle savedInstanceState) 액티비티가 처음 만들어졌을 때 호출된다. 이 함수는 savedInstanceState를 매개변수로 받는다. savedInstanceState는 Bundle 객체로 Activity에 저장되어 있는 상태정보를 포함하고 있다. Activity가 처음 생성된 경우 이 값은 null이다. onStart() 액티비티가 화면에 보이기 바로 전에 호출된다 액티비티가 화면상에 보이면 이 메소드 다음에 onResume() 메소드가 호출된다 액티비티가 화면에서 가려지게 되면 이 메소드 다음에 onStop() 메소드가 호출된다 onResume() 액티비티가 사용자와 상호작용하기 바로 전에 호출된다 onRestart() 액티비티가 중지된 이후에 호출되는 메소드로 다시 시작되기 바로 전에 호출된다 이 메소드 다음에는 항상 onStart() 메소드가 호출된다 onPause() 또 다른 액티비티를 시작하려고 할 때 호출된다 저장되지 않은 데이터를 저장소에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능을 수행한다 onStop() 메서드가 리턴하기 전에는 다음 액티비티가 시작될 수 없으므로 이 작업은 매우 빨리 수행된 후 리턴되어야 한다 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있다 onDestroy() 액티비티가 소멸되어 없어지기 전에 호출된다 이 메소드는 액티비티가 받은 마지막 호출이 된다. 액티비티가 애플리케이션에 의해 종료되거나(finish()등의 호출) 시스템이 장제로 종료시키는 경우에 호출시킬 수 있다 위의 두 가지 경우를 구분할 때 isFinishg() 메소드를 이용한다. 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있다 public class MainActivity extends AppCompatActivity { @Override protecte

[Android] WebView

이미지
WebView는 웹페이지를 App안에 넣고 싶은 경우에 사용한다.  xml 파일에 Palette > Widgets 에서 추가 할 수 있다 웹뷰 설정 WebSettings 객체에 웹뷰의 설정 정보가 들어 있다. 이 객체는 getSettings() 메서드를 사용해 참조할 수 있으며 캐시 여부, 폰트 크기 설정, 화면 확대 여부, 자바스크립트 허용 여부 등을 설정할 수 있다. WebView wv = findViewById(R.id.wv); wv.setWebViewClient(new WebViewClient()); // javascript 허용 wv.getSettings().setJavaScriptEnabled(true); // 웹페이지를 로딩하여 화면에 보여준다 wv.loadUrl("https://yumdevelop.blogspot.com"); Error  [ net::ERR_CACHE_MISS ] 바로 실행할 경우 오류가 발생한다. WebView를 사용할 때 인터넷에 접속하기 때문이다. network를 통해 웹페이지에 접속하기 위해서 인터넷 접속 권한 환경설정이 필요하다. 아래와 같이 Manifest.xml 파일에 permission 태그를 추가한다. <!-- app > manifests > AndroidManifest.xml --> <uses-permission android:name="android.permission.INTERNET"/> 화면에 WebView를 추가한 결과

안드로이드 기본 구조

이미지
안드로이드 구조 app [manifest] AndroidManifest.xml app의 환경설정 파일, icon, title 등 설정 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.student.p181"> <application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <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> [j