Intro Surface, SurfaceHodler, EGLSurface, SurfaceView, GLSurfaceView, SurfaceTexture, TextureView, SurfaceFlinger에 대해 모든 개발자들이 알아야 하는 것 이 문서는 안드로이드의 “시스템 레벨” 그래픽 아키텍처의 필수 요소들과, 그것들 애플리케이션 프레임워크와 멀티미디어 시스템에 의해 어떻게 이용되는지를 설명한다. 만일 여러분이 왜 SurfaceView와 TextureView가 그들 각자의 방식으로 동작하는지, 또는 Surface와 EGLSurface가 어떻게 연동하는지가 궁금하다면 제대로 찾아온 것이다. 이 문서는 여러분이 안드로이드 디바이스와 애플리케이션 개발에 어느 정도 익숙하다고 가정한다. 하지만, 안드로이드 ..
안드로이드의 Secure Boot는 디바이스가 부팅될 때 운영 체제와 그 커널이 변조되지 않았는지 확인하는 보안 메커니즘입니다. 이 기능은 사용자와 기기의 데이터를 안전하게 보호하기 위해 설계되었습니다. Secure Boot는 루트킷이나 부트로더 수준에서의 악성 소프트웨어 공격으로부터 기기를 보호하는 데 중요한 역할을 합니다. 안드로이드 디바이스가 부팅 과정을 시작할 때, Secure Boot는 소프트웨어가 신뢰할 수 있는 출처에서 온 것인지를 검증합니다. 작동 방식 Bootloader 검증: Secure Boot는 첫 번째 단계로서, 디바이스의 부트로더가 정상적인지 확인합니다. 부트로더는 공개 키 인프라(PKI)를 사용하여 서명되어 있으며, 디바이스의 펌웨어에 내장된 해당 공개 키로 검증됩니다. 운영 ..
아래와 같은 예제를 통해 Android에서 Choreographer를 사용하면 60fps일때 매 프레임 16.66ms마다 callback을 받을수 있다. class MainActivity : AppCompatActivity(), Choreographer.FrameCallback { lateinit var time: TextView lateinit var choreographer: Choreographer private val format = SimpleDateFormat("mm:ss.SSS", Locale.US) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.lay..
이전에 올렸던 글에서는 썸네일을 직접 생성하는 방법에 관한 이야기이고 https://duongame.tistory.com/334 이번에는 Android 시스템에서 미리 추출해둔 동영상을 획득하는 방법을 알아보자. 어떤 예제에서는 MediaStore.Video.Media._ID, MediaStore.Video.Media.DISPLAY_NAME 을 사용하는 것이 있는데 이것은 현재 동작하지 않는다. 아래와 같이 MediaStore.Video.VideoColumns을 사용해야 한다. String[] proj = { MediaStore.Video.VideoColumns._ID, }; Cursor cursor = context.getContentResolver().query( MediaStore.Video.Med..
안드로이드에서 Google Drive API를 사용하는 예제이다.구글에서 제공하는 예제넌 quick-start로서 해당 앱의 정보만 업로드하는 기능이고, 사용자의 전체 구글 드라이브의 정보를 리스팅하고 받아오지는 못한다.우리는 사용자가 기존에 저장해 두었던 정보를 리스팅해 볼것이다. 아래의 페이지에서 사용할 package name과 keystore의 sha-1 키를 등록하자.https://developers.google.com/drive/android/get-started 그리고 다음과 같이 소스코드를 구현한다. 단 package name은 위에서 등록한 package name이어야 한다.public class MainActivity extends AppCompatActivity { private sta..
최근 안드로이드의 Button은 기본적으로 대문자로 설정되어 있으며, 특정 길이보다 설정된 텍스트의 문자열이 짧으면 최소의 width를 차지한다. 이를 변경하기 위해서는 XML에서는 다음과 같이 minWidth=0으로 설정하면 된다. 그런데 code로 버튼을 생성할때는 setMinWidth가 있고, setMinimumWidth가 있다. 두개 중에 어느 하나만으로는 제대로 된 결과를 얻을수 없고 다음과 같이 2개를 동시에 호출해야 한다. Button btn3 = new Button(this);btn3.setMinWidth(0);btn3.setMinimumWidth(0);btn3.setLayoutParams(btnparams);btn3.setText("0");layout.addView(btn3);
var request = require('request'); var url = 'https://fcm.googleapis.com/fcm/send';var apikey = 'AAAA3WrrgCQ:APA91bHQnxgfAP4hurrF3OyBGla-oU3IO3cU9L6BmAvlmm1Ifbm130tTCqttTU2nJiOI4Q5_0-mdz5ht-d_6hLTW9XqvE1TDfIHTYOhsHipFNjwDNnKNRoKl7gnztok2_ZJC45j2k???'; //fcmvar token = 'dJvWJi4Kwss:APA91bGyIma2jGAXvAGV75zlEhY9fo8ev0QFUevFy5tIY6aazHQIImHUdOkuMdzWESGUgjULB2Swy-o4Q07k_37PqZ8-9WXqE1gwko4Z2v3Mw55PjR1qB..
- Total
- Today
- Yesterday