2015-03-19 9 views
12

Khi ai đó nhấp vào liên kết trong trang web có dạng "com.foo.bar://testtest", tôi muốn nó mở trò chơi đoàn kết của mình và cho tôi lấy dữ liệu kiểm tra.Làm thế nào để sử dụng hoạt động không chính để nắm bắt url tùy chỉnh trong trò chơi thống nhất?

Tôi là một lập trình viên có kinh nghiệm, nhưng khi nói đến android tôi loại google theo cách của tôi xung quanh hơn là thực sự hiểu bất cứ điều gì. Bare rằng trong tâm trí. :)

Tôi có thể phản ứng với các liên kết trên Android bằng cách sử dụng bộ lọc ý định. Tuy nhiên tất cả các tài nguyên tôi đã tìm thấy đều cho rằng bạn có thể mở rộng hoạt động chính của mình để nắm bắt mục đích mới. Có thể làm điều đó với sự thống nhất, nhưng vì nhiều lý do tôi không muốn. Tôi đã cố gắng tạo ra một hoạt động mới, xuất khẩu nó vào một cái lọ, và thêm này để biểu hiện của tôi trong thẻ ứng dụng:

<activity android:name="com.foo.ProtocolCatcher" 
      android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 

    <intent-filter> 
     <data android:scheme="com.foo.bar" /> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
    </intent-filter> 
</activity> 

nhấp vào liên kết ra mắt thành công trò chơi của tôi, nhưng vào một màn hình màu đen.

Sửa: Tôi cũng đã cố gắng định dạng này để không thay đổi:

<activity android:name="com.foo.ProtocolCatcher" 
      android:label="@string/app_name"> 
    <intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="com.foo.bar" /> 
    </intent-filter> 
</activity> 

những câu thần chú ma thuật để làm cho khởi động toàn bộ trò chơi, cùng với các hoạt động tùy chỉnh của tôi, và để hoạt động tùy chỉnh của tôi đọc là gì URL đến mà không chạm vào hoạt động chính?

+0

hãy xem http://oferei.com/2013/06/serverless-instagram-authentication/ – MZaragoza

+0

@tenpn bất kỳ tiến trình nào? Bạn đã thử giải pháp dưới đây chưa? – bonnyz

Trả lời

3

Tôi cho rằng bạn đang thiếu một phần của trình tự khởi động; các bước cần thiết như sau:

  1. Xác định ProtocolCatcherActivity với te đúng chương trình (OK)
  2. Xác định MainActivty, đại diện của bạn Unity3D trò chơi chính Activity (OK)
  3. Bắt đầu MainActivity khi ProtocolCatcherActivity được bắt đầu (MISSING)

Thực hiện bước thứ ba là siêu dễ dàng; chỉ cần chỉnh sửa của bạn ProtocolCatcherActivity 's onCreate() phương pháp:

//ProtocolCatcher 
//... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //... 

    Intent gameIntent = new Intent(this, MainActivity.class); 
    /* 
     //Pass the extra data to the game if needed 
     Intent sourceIntent = getIntent(); 
     Uri data = sourceIntent.getData(); 
     gameIntent.putExtra("uriData", data != null ? data.toString(): null); 
    */ 
    startActivity(gameIntent); //start the real game 
    finish(); //close the ProtocolCatcher activity 

} 

Xét thực tế là bạn đang "tiêm" các ProtocolCatcherActivity bằng tay, nếu bạn có vấn đề để tham khảo MainActivity từ ProtocolCatcheronCreate() bạn có thể lookup the relative Class using reflection.

+0

Thực ra, tôi nghĩ rằng đó là 'UnityActivity' đại diện cho trò chơi Unity, không phải là 'MainActivity'. –

+0

Có, tôi đã sử dụng 'com.unity3d.player.UnityPlayerProxyActivity' làm MainActivity. Nó đã làm việc. Chỉ niggle là nó khởi động lại trò chơi nếu nó đã được mở và bạn làm theo một liên kết. – tenpn

+0

... Tôi đã khắc phục sự cố khởi chạy lại bằng cách gói startActivity() trong 'if (com.unity3d.player.UnityPlayer.currentActivity == null) ' – tenpn

Các vấn đề liên quan