2 回答
TA貢獻1824條經驗 獲得超8個贊
當你從 UnityPlayerActivity 啟動一個活動時,onActivityResult 將在完成時被調用,但會有它的默認返回值。您可以做的是在 Android 中創建一個新的 Activity,并擴展 UnityPlayerActivity。
在 Android 中,創建一個新的 Activity
import com.unity3d.player.UnityPlayer;
public class OverrideUnityPlayerActivity extends UnityPlayerActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public Activity getCurrentActivity(){
return mUnityPlayer.currentActivity;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
switch (resultCode) {
case Activity.RESULT_OK:
//do something
break;
case Activity.RESULT_CANCELED:
//do something
break;
}
}
}
}
您需要將此覆蓋活動設置為 AndroidManifest.XML 中的啟動端點
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="false"
tools:replace="android:allowBackup">
<activity
android:name="com.example.unitylibrary.manager.OverrideUnityPlayerActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="app_name" android:value="app_value"/>
</activity>
</application>
</manifest>
3.然后在Unity中,可以得到這個activity和context,也可以得到onActivityResult
AndroidJavaObject overridePlayerActivity;
AndroidJavaObject overrideActivity;
public void init(){
overridePlayerActivity = new AndroidJavaObject("com.example.unitylibrary.manager.OverrideUnityPlayerActivity");
overrideActivity= overridePlayerActivity.Call<AndroidJavaObject>("getCurrentActivity");
}
public void startAct(){
anonymousFunction.Call("StartActForRes", overrideActivity);
}
希望這能解決您的問題。
TA貢獻1859條經驗 獲得超6個贊
好吧,我解決了我自己的問題,即讓 Google 身份驗證在 Android .aar 插件和 Unity c# 之間工作。一直在不知疲倦地工作并找到了一些kickbutt資源。
首先,我在這里引用了一個名為 cwgtech 的人編寫的代碼。
我還瀏覽了他所有的視頻。
我沒有使用 UnitySendMessage,而是使用類似于 CWGTech 所做的回調方法將 googleIdToken 發送回 Unity 并使用 Google 登錄 Firebase。我認為我的錯誤在于以下陳述也是正確的:
activity.startActivityForResult(signInIntent, RC_SIGN_IN);
我沒有這樣做,而是按照 CWGTech 的建議刪除了“活動”。部分。我在擴展 Activity 的 ResultCallback 類中運行 startActivityForResult。如果您仍然感到困惑,請 dm 我或評論此帖子。謝謝!
這是我用來通過 Java 代理向 Unity 發送回調字符串的一些代碼,用 C# 編寫。有關編寫 Java 代理的信息可以在上面的 cwgtech 信息中找到。如果您想獲取從 Android 活動流向 Unity C# 的信息,則編寫 java 代理非常重要。CWGTech 對 java 代理的復雜性的解釋比我能做到的要好得多。
public static final String LOGTAG = GoogleSignInActivity.TAG + "_OnResult";
public static GoogleSignInActivity.ShareStringCallback shareStringCallback;
private static final int RC_SIGN_IN = 9001;
private GoogleSignInClient mGoogleSignInClient;
private GoogleSignInOptions gso;
private CallbackManager mCallbackManager;
public void myFinish(String myresult) {
if (shareStringCallback != null) {
shareStringCallback.onLoginComplete(myresult);
}
shareStringCallback = null;
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(LOGTAG, "onCreateBundle");
Intent intent = getIntent();
setContentView(R.layout.login_activity);
findViewById(R.id.buttonFacebookLogin).setOnClickListener(this);
findViewById(R.id.signInButton).setOnClickListener(this);
findViewById(R.id.buttonAnonymousSignIn).setOnClickListener(this);
}
/* GOOGLE SIGN-IN CODE */
public Intent StartGoogleLogin() {
/*
Google Sign In Client Init Code Goes Here
*/
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
return signInIntent;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//Detects some type of result from an activity, in this case Google
String id_result = "Send This To Unity";
myFinish(id_result);
}
這是來自不同 java 類文件的更多代碼。'Login' 方法是從 Unity c# 調用的。
/* INTERFACES FOR CALLBACK FUNCTIONAILITY */
public interface ShareStringCallback {
public void onLoginComplete(String result);
}
public void Login(final ShareStringCallback callback)
{
mainActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Log.i(TAG,"Starting Authentication");
try {
try {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setClass(mainActivity,OnResultCallback.class);
OnResultCallback.shareStringCallback = callback;
mainActivity.startActivity(shareIntent);
}
catch (Exception e)
{
e.printStackTrace();
Log.i(TAG,"error sharing intent: " + e);
}
}
catch (Exception e)
{
e.printStackTrace();
Log.i(TAG,"Error getting Uri: " + e);
}
}
catch (Exception e)
{
e.printStackTrace();
Log.i(TAG,"Error writing file: " + e);
}
}
});
}
添加回答
舉報
