일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Snackbar
- Scaffold
- Flutter Tutorial
- Flutter 예제
- ListView.builder
- ListTile
- Image.network
- flutter
- Networking
- navigator
- listview
- Flutter 앱 배포
- Row Widget
- Column Widget
- Cached Image
- HTTP
- Flutter Example
- FutureBuilder
- CrossAxisAlignment
- Hello World
- Load Image
- node.js
- WillPopScope
- sqlite
- Row
- 반석천
- InkWell
- Flutter 강좌
- MainAxisAlignment
- AppBar
- Today
- Total
목록Development/Android (44)
꿈꾸는 시스템 디자이너
우분투에서 adb를 이용해 디바이스를 제어할 경우 가끔 아래의 문제를 만날때가 있다. List of devices attached ????????????no permissions 이럴경우 서버를 재시작하는 것으로 해결 가능한데 가끔은 이마저도 안되는 경우가 있다. 이 때는 sudo 명령어를 이용해서 해결할 수 있다. 실제 SDK가 설치된 디렉토리로 이동해서 $ sdk/platform-tools adb 등의 파일들이 존재하는지 확인한 후.. 아래와 같이 sudo를 이용해서 서버를 재시작하면 해결이 가능하다. $ sudo ./adb kill-server $ sudo ./adb start-server $ sudo ./adb devices
ListView의 아이템이 CheckBox를 가질때, ListView에 setOnItemClickListener나 setOnItemLongClickListener를 구현해되 정작 ListView가 클리되지 않는 현상이 발생한다. 이는 리스트뷰의 아이템이 가지는 체크박스가 포커스를 가져가기 때문이다. 해결방법은 체크박스의 focusable 속성을 false로 설정해주면 정상적으로 리스트뷰가 클릭되고, 체크박스도 클릭된다.
Activity가 Service를 바인딩하고 서비스를 호출하는 앱을 개발할 때, 주로 특적 View를 클릭될 때 서비스내 메소드가 호출되도록 구현한다. 하지만 때에 따라서는 앱(엑티비티)가 시작되면서 서비스를 바인딩하고, 바로 서비스내 메소드를 호출할 필요가 있는데 이를 구현하기 위해서 Activity내의 onCreate() 안에서 서비스 메소드를 호출하면 에러가 발생한다. 이는 서비스가 아직 바인드 되지 않은 상태에서 서비스 메소드를 호출하기 때문이다. 앱이 실행하면서 바로 호출할 서비스 메소드가 있다면, onCreate()가 아닌 서비스 바인딩을 위해 구현한 ServiceConnection내의 onServiceConnected()내에서 호출하면 해결된다.
Activity에서 Intent를 이용하여 새로운 Activity나 Service를 실행하면 피호출되는 Activity나 Service의 onCreate()나 onStartCommand()에서 수신되는 Intent의 action값에 따라 적절한 처리를 하게 된다. 이 때 아주 바보 같은 실수를 저지를 수 있음에 주의를 요한다. ㅡ,ㅡ public int onStartCommand(Intent intent, int flags, int startId) { if(isAlive == false) startPamService(); String action = intent.getAction(); if(action == null) return super.onStartCommand(intent, flags, start..
앱위젯상에서 ProgressDialog를 표시할 필요가 많으나 정작 앱위젯에서는 ProgressDialog를 직접 실행 시킬 수 없다. 이를 해결하기 위해서는 ProgressDialog를 가지는 Activity를 실행시켜서 동일 효과를 주는 방법을 이용한다. 이를 위해선 부가적으로 activity를 투명하게 처리해야 한다. 우선 원하는 기능은 아래의 그림과 같다. 위젯이 동작하는 바탕화면에서 버튼을 클릭하면 ProgressDialog가 나타나는 것이다. 우선 앱위젯에 의해 실행될 ProgressDialog를 가지는 Activity를 투명하게 처리하기 위해서는, 메니페스트파일에 해당 activity를 투명으로 처리한다. android:theme="@android:style/Theme.Translucent...
본 포스트에서는 setOnClickPendingIntent를 통해 위젯내에 위치한 View 객체를 클릭했을 때 위젯을 재구성하는 예제를 살펴본다. 메니페스트파일부터 살펴보면, 20번째줄부터 브로드캐스트 리스버를 정의하고 있다. AppWidget은 일종의 브로드캐스트리시버이기 때문에 로 선언한다. 21번째 줄은 AppWidget을 구현하는 클래스파일을 명시한 것이고, 22번째 줄은 위젯 목록에 표시할 위젯의 이름을 의미한다. 실제 아래의 그림처럼 표시된다. 25번째줄부터, 위젯에서 수신할 액션을 를 통해 정의한다.35번째 줄은 이 브로드캐스트리시버가 앱위젯이라는 것을 명시하는 것이고, 이 앱위젯에 대한 정보를 기술한 파일의 위치와 파일명을 명시한다(36번째 줄). 실제로 res폴더에 xml이란 폴더를 생성..
앞선 포스트(AppWidget에서의 View 제어)에서는 언급한 것과 같이 AppWidget에서는 각각의 View객체를 직접 생성해서 이용할 수 없으므로, remoteViews.setInt(View객체ID, "제어메소드명",제어값) 방식으로 View객체를 제어한다. 이 View 객체에 onClick 이벤트를 적용하기 위해서는 setOnClickPendingIntent() 메소드를 이용한다. void android.widget.RemoteViews.setOnClickPendingIntent(int viewId, PendingIntent pendingIntent) 일반적으로 아래와 같은 방식으로 이용한다. remoteViews.setOnClickPendingIntent(R.id.rightButtonsRigh..
AppWidget은 일종의 브로드캐스트이기 때문에 일반 Activity에서 처럼 View 객체들을 생성해서 이용할 수 없다. 그래서 View 객체 제어를 위해서는 우선 Layout을 적용할 RemoteViews 객체를 생성하고, RemoteViews 개체 내부의 실제 각각의 View 객체들을 제어할 수 있다. 별도의 View 인스턴스를 생성하지 않고 아래와 같이 Layout에 미리 선언한 View들의 id를 이용해서 제어만 가능한다. 우선 아래와 같이 RemoteViews의 인스턴스를 생성한다. RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_main); 생성한 인스턴스에 setInt() 메소드를 이용해서..