如何从Google Play服务通知中检测意图

时间:2014-10-13 17:31:19

标签: android google-play google-play-services android-notifications google-play-games

我有一个带谷歌播放服务的应用程序(基础游戏),但我的主要活动没有谷歌播放连接。

Google Play连接处于单独活动状态。我不想强迫我的用户连接,如果他们不想,我不能把所有相关的东西放在我的主要活动中。

我的问题是:

  1. 有人发给我邀请
  2. 我收到通知
  3. 通知会将我重定向到默认的Google Play活动以接受此邀请
  4. 我接受并重定向到我应用的主要活动。
  5. 如何在接受邀请后检测重定向?
  6. 由于我的主要活动与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);
           }
    }
    

    但感觉就像是黑客,我想这个标志在某些设备上可能会有所不同。那么,它可以用清单完成,或者可能还有其他一些方法可以让你知道你刚从谷歌播放服务“接受邀请菜单”获得意图吗?

2 个答案:

答案 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可以解决此问题,并为我们提供灵活但确定的解决方案。