我的应用程序在不同的屏幕中使用:
[[UIApplication sharedApplication] openURL:url];
Run Code Online (Sandbox Code Playgroud)
为了打开从我的网络服务收到的 URL。有时,这些 URL 与我的项目无关,因此将它们打开到 Safari 是可以的。其他的,这些 URL 属于我自己的,比如产品详细信息。这些可以由我的应用程序使用通用链接打开并转到正确的屏幕,但这并没有发生。
阅读苹果文档我看到了这个:
重要的是要了解,如果您的应用程序使用 openURL: 打开指向您网站的通用链接,则该链接不会在您的应用程序中打开。在这种情况下,iOS 会识别出呼叫源自您的应用,因此不应将其作为通用链接由您的应用处理。
这种行为让我很困惑。如何使用 openURL 尝试首先在我的应用程序中处理该 URL,而不是直接转到 Safari?
我找到了一个快速/肮脏的解决方法。删除 openURL 并在我的应用每次使用 openURL 时使用它:
NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
userActivity.webpageURL = url;
[[UIApplication sharedApplication].delegate application:[UIApplication sharedApplication] continueUserActivity:userActivity restorationHandler:nil];
Run Code Online (Sandbox Code Playgroud)
请注意,我的 appdelegate application:continueUserActivity:restorationHandler: 会将我的应用程序中没有特定屏幕的任何 URL 转发到 openURL,因此,它工作得非常好,但我觉得这是一个糟糕的解决方案。
我没有成功启动具有多个目的地的Google地图应用程序,但我没有找到任何指定是否可能的内容.
虽然此代码适用于一个目的地和用户当前位置:
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?saddr=Curent+Location&daddr=San+Francisco,+CA"]]
Run Code Online (Sandbox Code Playgroud)
`
现在有两个目的地,这样的当前用户位置不起作用:
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?saddr=Curent+Location&daddr=San+Francisco,+CA+to:los+angeles,+CA"]]
Run Code Online (Sandbox Code Playgroud)
`结果是到最后一个目的地的路线.
我实际上目前正在寻找iOS和Android操作系统上的解决方案,因为应用程序在两者上运行.基本上会有一个保存位置的列表,用户可以从中选择创建旅行以将他们带到一个目的地,在那里他们可以停下来做东西,然后继续导航到下一个位置.
编辑:
几年后,事情变得更容易了.现在可以省略Register()应用程序和应用程序委托上的
属性,而是使用:
UIApplication.Main(args, typeof(CustomApp), typeof(CustomAppDelegate));
为了能够覆盖UIApplication.SendEvent(),我想要子类化UIApplication:
public class UIApplicationMain : UIApplication
{
public UIApplicationMain () : base()
{
}
public override void SendEvent (UIEvent uievent)
{
base.SendEvent (uievent);
}
}
Run Code Online (Sandbox Code Playgroud)
在main.cs中我使用以下代码:
public class Application
{
static void Main (string[] args)
{
UIApplication.Main (args, "UIApplicationMain", "AppDelegateBase");
}
}
Run Code Online (Sandbox Code Playgroud)
但它失败了:
Run Code Online (Sandbox Code Playgroud)Objective-C exception thrown. Name:NSInternalInconsistencyException原因:无法实例化UIApplication子类实例.没有加载名为UIApplicationMain的类.
所以我猜错了一些属性.但是在哪里和哪里?
背景:直到Xcode 4.2,使用任何模板创建的新项目都包含MainWindow.xib,因此将nil作为UIApplicationMain()的第四个参数传递.从Xcode 4.2开始,所有模板都通过将类字符串作为第四个参数传递来实例化应用程序委托,而不是在xib中构建应用程序的窗口.
在4.2中完成此设置是微不足道的,当然它按预期工作:创建xib设置文件的所有者到UIApplication并连接委托,在Info.plist中指定它,在main()中指定第四个参数.
问题:为什么Apple鼓励实例化应用程序委托并在代码中构建UIWindow而不是"旧方法"?有什么好处?
注意事项:如果您选择使用故事板作为管理UI的方式,我会期望这种新的模板行为,但是如果您取消选中"使用故事板",我会期望旧的pass-nil-and-use-MainWindow.xib模板.
这个问题在这里以迂回的方式提出,但讨论的答案有点薄弱.
我正在尝试处理UIApplication Notifications以在当前打开的视图中获取URL Schemes.我尝试了几个通知,但我不知道哪个对象包含URL Schemes.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
//[nc addObserver:self selector:@selector(DocumentToDropboxDelegate) name:UIApplicationWillResignActiveNotification object:nil];
[nc addObserver:self selector:@selector(DocumentToDropboxDelegate) name:UIApplicationDidFinishLaunchingNotification object:nil];
Run Code Online (Sandbox Code Playgroud)
有人pelase可以帮助我解决这个问题.
我们正在检查是否使用UIApplication的enabledRemoteNotificationTypes方法启用了APN.这适用于iOS 6及更低版本的iPhone.但是,在iOS 6.0.1的iPod上,该方法继续返回0,表示没有启用APN类型,即使在iPod的设置中手动启用了APN也是如此.
在首次在此应用的设备上手动禁用APN之后,会发生这种情况.
有没有人见过这个?你对如何应对它有什么建议吗?
谢谢.
看起来
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
和
didReceiveLocalNotification:(UILocalNotification *)notification
仅在用户确认UILocalNotification时触发,例如通过滑动滑块或触摸iOS通知下拉菜单中的条目.
如果用户忽略UILocalNotification并通过单击应用程序图标重新进入应用程序,有没有办法告诉UILocalNotification已关闭?
我应该提到这实际上仅适用于重复通知,因为可以通过观察总计数来检测非重复通知的触发.也就是说,当他们开火时,它就会消失[[UIApplication sharedApplication] scheduledLocalNotifications].
我正在寻找像......
[[UIApplication sharedApplication] unacknowledgedLocalNotifications]
唉,我找不到类似的东西.
如何在Swift中为后台提取调用完成处理程序.我做以下事情:
func application(application: UIApplication,
performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// Do something
completionHandler (UIBackgroundFetchResultNoData) // This does not work :(
return
}
Run Code Online (Sandbox Code Playgroud)
你能帮我么?谢谢,
托比
在iOS 9中,以下用于检测通知的代码不会触发选择器方法.在以前的版本(例如8.4)中它运行良好.有谁知道为什么?
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(yourMethod)
name:UIApplicationDidBecomeActiveNotification
object:nil];
- (void)yourMethod {NSLog(@"aaaaaaa");}
Run Code Online (Sandbox Code Playgroud) 我可以通过普通应用程序从UIApplication获取状态栏
[UIApplication sharedApplication].statusBarFrame
Run Code Online (Sandbox Code Playgroud)
但我们无法从Extension访问UIApplication.有没有办法在共享中获取状态栏?
uiviewcontroller uiapplication ios ios8-share-extension share-extension
uiapplication ×10
ios ×6
c# ×1
ios6 ×1
ios9 ×1
iphone ×1
ipod-touch ×1
mainwindow ×1
swift ×1
uikit ×1
url-scheme ×1
xamarin.ios ×1
xcode ×1
xcode4 ×1