android 위젯 예제

앱에서 위젯의 데이터를 더 자주 업데이트해야 하는 경우 Android 시스템에서 수행하는 것과 동일한 의도를 주기적으로 시작할 수 있는 솔루션이 이미 있습니다. 커피 로그 응용 프로그램의 경우 사용자가 응용 프로그램에서 커피를 선택할 때마다 발생합니다. 당신은 안드로이드 매니페스트.xml 파일에 만든 마법사업데이트를 보고 볼 수 있습니다 : 당신은 더 많은 재료 디자인과 응용 프로그램 및 위젯에 대한 더 나은 사용자 인터페이스를 만들 수 있습니다. 안드로이드에서 약간의 지식 부스트를 얻을 : 재료 디자인소개. 위젯은 일반 브로드캐스트 수신기와 동일한 런타임 제한을 가지며, 즉 처리를 완료하는 데 5초밖에 되지 않습니다. 좋은! 빌드 및 실행하면 위젯이 주기적으로 “그램” 값을 업데이트하는 것을 볼 수 있습니다. 누군가가 너무 많은 커피를 가진 것 같습니다 : 안드로이드 8에서 배터리에 대한 전체 액세스가 허용되지 않으면 위젯이 불안정합니다. 그렇지 않으면, 안드로이드는 위젯을 잘라 그는 누르면 에 응답하지 않습니다. 이 에 대한 해결 방법이 있습니까? 또는 사용자가 이것을 기억하고 수동으로 응용 프로그램이 배터리에 대한 전체 액세스를 허용해야 합니까? 위젯은 RemoteView를 사용하여 사용자 인터페이스를 만듭니다. RemoteView원래 응용 프로그램과 동일한 권한을 가진 다른 프로세스에서 RemoteView를 실행할 수 있습니다. 이렇게 하면 위젯이 정의 응용 프로그램의 사용 권한으로 실행됩니다. 우리가 할 첫 번째 일은 우리의 위젯 레이아웃을 디자인하는 것입니다. 앱 위젯을 배치하는 것은 활동 및/또는 조각을 배치하는 것과 유사하지만 주의해야 할 매우 중요한 요소가 있습니다.

앱 위젯 레이아웃은 RemoteViews 레이아웃을 기반으로 합니다. 즉, 모든 View 하위 클래스를 위젯에서 사용할 수 없습니다. 사실, 유일한 지원되는 클래스는 프레임 레이아웃, 선형 레이아웃, 상대 레이아웃, 그리드 레이아웃, 아날로그 시계, 버튼, 크로노미터, 이미지 버튼, 이미지 뷰, 진행률 표시줄, 텍스트보기, 뷰 플리퍼, 리스트 뷰, 그리드 뷰, 스택 뷰 및 어댑터View플립퍼입니다. 하위 클래스와 하위 클래스도 지원되지 않습니다. 이 점을 염두에 두고, 우리는 우리의 위젯 레이아웃을 설계, 라는 simple_widget.xml 지금 당신이 당신의 전화 위젯 응용 프로그램 서랍에서 보면이 위젯 표시 를 볼 것 이다 그리고 당신은 당신이 원하는 어디 든 지 배치할 수 있습니다. 당신이 그것을 누를 때 지금, 그것은 아무것도하지 않습니다. 위젯을 등록하려면 android.appwidget.action.APPWIDGET_UPDATE 작업에 대한 의도 필터가 있는 브로드캐스트 수신기를 만듭니다. 위의 onUpdate() 메서드에서는 모든 위젯을 반복하고(사용자가 여러 위젯을 배치한 경우), RemoteView 개체를 얻고, RemoteView의 텍스트 뷰를 100에서 999 사이의 새 난수로 업데이트한 다음 발생해야 하는 작업을 지정합니다. 버튼을 누를 때 업데이트 단추를 클릭할 때 수동 업데이트를 요청하려면 보류 중인 의도를 사용합니다.

의도에 대한 작업은 AppWidgetManager.ACTION_APPWIDGET_UPDATE로 설정됩니다. 위젯을 자동으로 업데이트해야 할 때 시스템에서 전송된 작업과 동일합니다. 우리는 또한 응용 프로그램 위젯을 만들기 위해 호출하여 업데이트해야 위젯 (응용 프로그램 위젯의 모든)를 나타냅니다, 당신이 필요로하는 첫 번째 것은 AppWidgetProviderInfo 개체입니다, 이는 별도의 위젯 XML 파일에 정의합니다. 이렇게 하려면 프로젝트를 마우스 오른쪽 단추로 클릭하고 xml이라는 새 폴더를 만듭니다. 이제 새로 만든 폴더를 마우스 오른쪽 버튼으로 클릭하고 새 XML 파일을 만듭니다. XML 파일의 리소스 형식은 AppWidgetProvider로 설정해야 합니다. XML 파일에서, 다음과 같은 몇 가지 속성을 정의 – 위젯은 일반적으로 화면 가장자리로 확장하지 않아야하고 시각적으로 다른 위젯과 플러시해서는 안, 그래서 당신은 당신의 위젯 프레임 주위의 모든 면에 여백을 추가해야합니다. 위젯은 사용할 수 있는 View 클래스에서 제한됩니다. 레이아웃으로 프레임 레이아웃, 선형 레이아웃 및 상대 레이아웃 클래스를 사용할 수 있습니다.