我有一个带谷歌播放服务的应用程序(基础游戏),但我的主要活动没有谷歌播放连接。
Google Play连接处于单独活动状态。我不想强迫我的用户连接,如果他们不想,我不能把所有相关的东西放在我的主要活动中。
我的问题是:
由于我的主要活动与Google Play无关,我不能只使用
@Override
public void onConnected(Bundle connectionHint) {
if (connectionHint != null)
mMatch = connectionHint.getParcelable(Multiplayer.EXTRA_TURN_BASED_MATCH);
}
我在不同的设备上有不同的意图,但我的所有设备都有 flg = 0x14000000
Intent {act = android.intent.action.MAIN flg = 0x14000000 cmp = com.virag.game /.Activities.MainActivity}
所以现在我在我的主要活动中使用它并且它有效:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent data = getIntent();
if ( data != null && data.getFlags() == 0x14000000){
// NetGameActivity is activity with google play connection
Intent intent = new Intent(this, NetGameActivity.class);
startActivity(intent);
}
}
但感觉就像是黑客,我想这个标志在某些设备上可能会有所不同。那么,它可以用清单完成,或者可能还有其他一些方法可以让你知道你刚从谷歌播放服务“接受邀请菜单”获得意图吗?
答案 0 :(得分:2)
单独连接到Google Play服务不需要用户互动。在example connecting code之后,如果用户已经登录(我认为如果他们处于回合制游戏中就是这种情况),则会调用onConnected()
而无需用户执行任何操作然后你就可以开始游戏了。
如果他们没有登录,则会调用onConnectionFailed()
,但是不要求您立即调用startResolutionForResult()
来启动登录过程 - 您可以忽略{{1}案件。
答案 1 :(得分:2)
到目前为止,我只能在@Varren的Hack上上1。当Play游戏服务启动MainActivity时,我注意到了两件事。
- getFlags()始终为0x14000000。
- getPackage()永远不会为空,而当我们从应用程序菜单或调试模式启动应用程序时,它始终为空。
因此,使用这两个指针,下面是我现在要检查的内容:
Intent i = getIntent();
int x = i.getFlags();
if(x==0x14000000){Log.d(TAG, "INTENT: flag matches Play!... " + x);}
if(i.getPackage()!=null){Log.d(TAG, "INTENT: package matches Play!... " + getPackage());}
//debug sheet values
//INTENT: flag matches Play!... 335544320
//INTENT: package matches Play!... com.example.MultiPlayerSample
最终,我仍然不太自信,因为我知道它仍然是黑客。我只是希望Google Game Play Services可以解决此问题,并为我们提供灵活但确定的解决方案。