Google Associate Android Developer Google Developers Certification – Associate Android Developer (Kotlin and Java Exam) Online Training
Google Associate Android Developer Online Training
The questions for Associate Android Developer were last updated at Feb 10,2025.
- Exam Code: Associate Android Developer
- Exam Name: Google Developers Certification - Associate Android Developer (Kotlin and Java Exam)
- Certification Provider: Google
- Latest update: Feb 10,2025
What is a correct part of an Implicit Intent for sharing data implementation?
- A . val sendIntent = Intent(this, UploadService::class.java).apply { putExtra(Intent.EXTRA_TEXT, textMessage)
… - B . val sendIntent = Intent().apply { type = Intent.ACTION_SEND;
… - C . val sendIntent = Intent(this, UploadService::class.java).apply { data = Uri.parse(fileUrl)
… - D . val sendIntent = Intent().apply { action = Intent.ACTION_SEND
…
By default, the notification’s text content is truncated to fit one line.
If you want your notification to be longer, for example, to create a larger text area, you can do it in this way:
- A . var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentText("Much longer text that cannot fit one line…")
.setStyle(NotificationCompat.BigTextStyle()
.bigText("Much longer text that cannot fit one line…"))
… - B . var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentText("Much longer text that cannot fit one line…")
.setLongText("Much longer text that cannot fit one line…"))
… - C . var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentText("Much longer text that cannot fit one line…")
.setTheme(android.R.style.Theme_LongText);
…
Select correct demonstration of WorkRequest cancellation.
- A . workManager.enqueue(OneTimeWorkRequest.Builder(FooWorker::class.java).build())
- B . val request: WorkRequest = OneTimeWorkRequest.Builder (FooWorker::class.java).build() workManager.enqueue(request)
val status = workManager.getWorkInfoByIdLiveData(request.id) status.observe(…) - C . val request: WorkRequest = OneTimeWorkRequest.Builder (FooWorker::class.java).build() workManager.enqueue(request) workManager.cancelWorkById(request.id)
- D . val request1: WorkRequest = OneTimeWorkRequest.Builder (FooWorker::class.java).build()
val request2: WorkRequest = OneTimeWorkRequest.Builder (BarWorker::class.java).build()
val request3: WorkRequest = OneTimeWorkRequest.Builder (BazWorker::class.java).build()
workManager.beginWith(request1, request2).then(request3).enqueue() - E . val request: WorkRequest = OneTimeWorkRequest.Builder (FooWorker::class.java).build()
workManager.enqueue(request) workManager.cancelWork(request)
In general, you should send an AccessibilityEvent whenever the content of your custom view changes. For example, if you are implementing a custom slider bar that allows a user to select a numeric value by pressing the left or right arrows, your custom view should emit an event of type TYPE_VIEW_TEXT_CHANGED whenever the slider value changes.
Which one of the following sample codes demonstrates the use of the sendAccessibilityEvent() method to report this event.
- A . override fun dispatchPopulateAccessibilityEvent(event: AccessibilityEvent): Boolean {
return super.dispatchPopulateAccessibilityEvent(event).let { completed -> if (text?.isNotEmpty() == true) {
event.text.add(text) true
} else { completed
}
}
} - B . override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_DPAD_LEFT -> {
currentValue–
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) true
}
…
}
} - C . override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_ENTER -> {
currentValue– sendAccessibilityEvent (AccessibilityEvent.TYPE_VIEW_CONTEXT_CLICKED) true
}
…
}
}
The easiest way of adding menu items (to specify the options menu for an activity) is inflating an
XML file into the Menu via MenuInflater.
With menu_main.xml we can do it in this way:
- A . override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
} - B . override fun onOptionsItemSelected(item: MenuItem): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return super.onOptionsItemSelected(item) }
- C . override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
setContentView(R.menu.menu_main)
}
Android Tests. You can use the childSelector() method to nest multiple UiSelector instances. For example, the following code example shows how your test might specify a search to find the first ListView in the currently displayed UI, then search within that ListView to find a UI element with the text property Apps.
What is the correct sample?
- A . val appItem: UiObject = device.findObject( UiSelector().className(ListView.class)
.instance(1)
.childSelector(
UiSelector().text("Apps")
)
) - B . val appItem: UiObject = device.findObject( UiSelector().className("android.widget.ListView")
.instance(0)
.childSelector(
UiSelector().text("Apps")
)
) - C . val appItem: UiObject = device.findObject( UiSelector().className("android.widget.ListView")
.instance(
UiSelector().text("Apps")
)
)
The following code snippet shows an example of an Espresso test:
- A . @Rule
fun greeterSaysHello() {
onView(withId(R.id.name_field)).do(typeText("Steve"))
onView(withId(R.id.greet_button)).do(click())
onView(withText("Hello Steve!")).check(matches(isDisplayed()))
} - B . @Test
fun greeterSaysHello() {
onView(withId(R.id.name_field)).perform(typeText("Steve"))
onView(withId(R.id.greet_button)).perform(click())
onView(withText("Hello Steve!")).check(matches(isDisplayed()))
} - C . @Test
fun greeterSaysHello() {
onView(withId(R.id.name_field)).do(typeText("Steve"))
onView(withId(R.id.greet_button)).do(click())
onView(withText("Hello Steve!")).compare(matches(isDisplayed()))
}
As an example. In an Activity we have our TimerViewModel object (extended ViewModel), named mTimerViewModel. mTimerViewModel.timer method returns a LiveData<Long> value.
What can be a correct way to set an observer to change UI in case if data was changed?
- A . mTimerViewModel!!.timer.value.toString().observe (Observer { aLong -> callAnyChangeUIMethodHere(aLong!!) })
- B . mTimerViewModel!!.timer.observe
(this, Observer { aLong -> callAnyChangeUIMethodHere(aLong!!) }) - C . mTimerViewModel.observe
(Observer { aLong -> callAnyChangeUIMethodHere(aLong!!) })
LiveData.postValue() and LiveData.setValue() methods have some differences.
So if you have a following code executed in the main thread:
liveData.postValue("a"); liveData.setValue("b");
What will be the correct statement?
- A . The value "b" would be set at first and later the main thread would override it with the value "a".
- B . The value "a" would be set at first and later the main thread would override it with the value "b".
- C . The value "b" would be set at first and would not be overridden with the value "a".
- D . The value "a" would be set at first and would not be overridden with the value "b".
In our TeaViewModel class, that extends ViewModel, we have such prorerty:
val tea: LiveData<Tea>
An observer in our Activity (type of mViewModel variable in example is TeaViewModel) is set in this way:
mViewModel!!.tea.observe(this, Observer { tea: Tea? -> displayTea(tea) })
What will be a correct displayTea method definition?
- A . private fun displayTea()
- B . private fun displayTea(tea: Tea?)
- C . private fun displayTea(tea: LiveData?<Tea>)
- D . private fun displayTea(tea: LiveData?<T>)