No Pop Up is displayed when Calling Games.Achievements.unlock

岁酱吖の 提交于 2019-12-18 13:14:21

问题


My current Android game employs BaseGameActivity.

My game employs Achievements, which are getting unlocked when required.

However i do not ALWAYS see the PopUps related to the unlock event.

I know the popup only appears when you first unlock the Achievement.

Some popups appear fine, others (from differnt screens within my game) never appear.

What do i have to do to Guarantee the popups appear?

I have a feeling its related to this WARNING:

W/PopupManager(10725): You have not specified a View to use as content view for popups.

Falling back to the Activity content view which may not work properly in future versions
of the API. 
Use setViewForPopups() to set your content view.

I have called setViewForPopups() from within the activity my popups do not display in, however i have never seen them.

How do you call setViewForPopups() so that you entire application nevers sees the WARNING messages shown above?


回答1:


I have found a solution, by using the following code

Games.setViewForPopups(getApiClient(), getWindow().getDecorView().findViewById(android.R.id.content));

I can get popups to show. I now have a related issue. The popup doesn't display for very long.

I think this is due to the fact I have a custom animation into this activity.

Is there any way to increase how long a popup is visible?




回答2:


Games.setViewForPopups is deprecated

To show popup, add the next code into your activity or fragment layout:

 <FrameLayout
    android:id="@+id/container_pop_up"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="16dp" />

And add the next code after the code where you init your object of AchievementsClient class

 GamesClient gamesClient = Games.getGamesClient(MainActivity.this, googleSignInAccount);
 gamesClient.setViewForPopups(findViewById(R.id.container_pop_up));

where googleSignInAccount is GoogleSignInAccount's object




回答3:


This worked for me.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate");

    setContentView(R.layout.activity_main);

    // Create the Google API Client with access to Plus, Games and Drive
    // Also set the view for popups
    mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
            .addApi(Games.API).addScope(Games.SCOPE_GAMES)
            .addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER)
            .setViewForPopups(findViewById(android.R.id.content))
            .build();

}

android.R.id.content gives you the root element of a view, without having to know its actual name/type/ID. Check out Get root view from current activity




回答4:


For those of you struggling in Kotlin this is what works for me:

private fun signInSilently() {
    mGoogleSignInClient.silentSignIn().addOnCompleteListener(this)
    { task ->
        if (task.isSuccessful) {
            Log.d(LOG_TAG, "signInSilently(): success")
            mAchievementsClient = Games.getAchievementsClient(this, task.result!!)
            val gamesClient = Games.getGamesClient(this@AchievementsScreen, GoogleSignIn.getLastSignedInAccount(this)!!)
            gamesClient.setViewForPopups(findViewById(android.R.id.content))
            gamesClient.setGravityForPopups(Gravity.TOP or Gravity.CENTER_HORIZONTAL)
        } else {
            Log.d(LOG_TAG, "signInSilently(): failure", task.exception)
            startSignInIntent()
        }
    }
}


来源:https://stackoverflow.com/questions/24705483/no-pop-up-is-displayed-when-calling-games-achievements-unlock

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!