在 Unity 上打开“设置”应用程序 iOS
Open Settings application on Unity iOS
我需要一种方法让用户进入“设置”应用程序以禁用多任务手势。我知道在 iOS 8 中,您可以通过 Objective-C 中的 URL 以编程方式启动设置应用程序:
NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
但我不知道如何在 Unity 中获得此 URL 以与 Application.OpenURL()
一起使用
您需要为此编写一个小型 iOS 插件,这里有更多相关信息:http://docs.unity3d.com/Manual/PluginsForIOS.html
这是您的解决方案,请询问是否有不清楚的地方。
Script/Example.cs
using UnityEngine;
public class Example
{
public void OpenSettings()
{
#if UNITY_IPHONE
string url = MyNativeBindings.GetSettingsURL();
Debug.Log("the settings url is:" + url);
Application.OpenURL(url);
#endif
}
}
Plugins/MyNativeBindings.cs
public class MyNativeBindings
{
#if UNITY_IPHONE
[DllImport ("__Internal")]
public static extern string GetSettingsURL();
[DllImport ("__Internal")]
public static extern void OpenSettings();
#endif
}
Plugins/iOS/MyNativeBindings.mm
extern "C" {
// Helper method to create C string copy
char* MakeStringCopy (NSString* nsstring)
{
if (nsstring == NULL) {
return NULL;
}
// convert from NSString to char with utf8 encoding
const char* string = [nsstring cStringUsingEncoding:NSUTF8StringEncoding];
if (string == NULL) {
return NULL;
}
// create char copy with malloc and strcpy
char* res = (char*)malloc(strlen(string) + 1);
strcpy(res, string);
return res;
}
const char* GetSettingsURL () {
NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
return MakeStringCopy(url.absoluteString);
}
void OpenSettings () {
NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL: url];
}
}
使用 JeanLuc 的想法,我创建了一个空的 XCode 项目并打印字符串常量 UIApplicationOpenSettingsURLString
并在 Unity 中与 Application.OpenURL() 一起使用而不必使用插件。效果很好。
常量 UIApplicationOpenSettingsURLString
的值为:"app-settings:"(无配额)。
使用:Application.OpenURL("app-settings:")
unity直接打开
警告:使用硬编码字符串很危险,如果 Apple 更改常量 UIApplicationOpenSettingsURLString
的值,可能会破坏您的代码。这只是一种解决方法,而 Unity 不会在 C# 代码中添加常量以供参考。
我需要一种方法让用户进入“设置”应用程序以禁用多任务手势。我知道在 iOS 8 中,您可以通过 Objective-C 中的 URL 以编程方式启动设置应用程序:
NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
但我不知道如何在 Unity 中获得此 URL 以与 Application.OpenURL()
一起使用您需要为此编写一个小型 iOS 插件,这里有更多相关信息:http://docs.unity3d.com/Manual/PluginsForIOS.html
这是您的解决方案,请询问是否有不清楚的地方。
Script/Example.cs
using UnityEngine;
public class Example
{
public void OpenSettings()
{
#if UNITY_IPHONE
string url = MyNativeBindings.GetSettingsURL();
Debug.Log("the settings url is:" + url);
Application.OpenURL(url);
#endif
}
}
Plugins/MyNativeBindings.cs
public class MyNativeBindings
{
#if UNITY_IPHONE
[DllImport ("__Internal")]
public static extern string GetSettingsURL();
[DllImport ("__Internal")]
public static extern void OpenSettings();
#endif
}
Plugins/iOS/MyNativeBindings.mm
extern "C" {
// Helper method to create C string copy
char* MakeStringCopy (NSString* nsstring)
{
if (nsstring == NULL) {
return NULL;
}
// convert from NSString to char with utf8 encoding
const char* string = [nsstring cStringUsingEncoding:NSUTF8StringEncoding];
if (string == NULL) {
return NULL;
}
// create char copy with malloc and strcpy
char* res = (char*)malloc(strlen(string) + 1);
strcpy(res, string);
return res;
}
const char* GetSettingsURL () {
NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
return MakeStringCopy(url.absoluteString);
}
void OpenSettings () {
NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL: url];
}
}
使用 JeanLuc 的想法,我创建了一个空的 XCode 项目并打印字符串常量 UIApplicationOpenSettingsURLString
并在 Unity 中与 Application.OpenURL() 一起使用而不必使用插件。效果很好。
常量 UIApplicationOpenSettingsURLString
的值为:"app-settings:"(无配额)。
使用:Application.OpenURL("app-settings:")
unity直接打开
警告:使用硬编码字符串很危险,如果 Apple 更改常量 UIApplicationOpenSettingsURLString
的值,可能会破坏您的代码。这只是一种解决方法,而 Unity 不会在 C# 代码中添加常量以供参考。