沸腾的泪水05314 2024-05-26 05:09 采纳率: 0%
浏览 71

iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面

iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面

我想实现一个功能,通过手机自带的快捷指令截屏,然后把图片(或从截屏中提取出的文本)共享给自己的App,并打开指定页面,如何实现,类似团团记账这样。

img

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-26 05:09
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要实现您所描述的功能,您需要在iOS开发中使用几个关键的技术点,包括快捷指令、图像识别、URL Schemes以及可能的OCR(光学字符识别)技术。以下是实现该功能的大致步骤:

    1. 在快捷指令中截屏并获取截屏图片

    在快捷指令中,您可以使用“截屏”操作来捕获当前屏幕的图像。快捷指令提供了一个动作来完成这个任务。

    2. 从截屏图片中提取文本

    要实现从图片中提取文本,您可以使用OCR技术。iOS提供了Vision框架来实现OCR功能。您可以使用VNRecognizeTextRequest来识别图像中的文本。

    3. 将截屏图片或提取的文本共享给App

    使用iOS的分享扩展(Share Extension),您可以创建一个扩展来处理来自快捷指令的共享内容。当用户选择分享到您的App时,您的扩展将被触发。

    4. 在App中接收共享的图片或文本,并打开指定页面

    在您的App中,您需要实现一个处理共享内容的逻辑。您可以使用UIPasteboard来获取共享的文本,或者使用URL Schemes来处理共享的图片。

    示例代码(部分)

    使用Vision框架进行OCR

    import Vision
    
    let requestHandler = VNImageRequestHandler(ciImage: ciImage, options: [:])
    try? requestHandler.perform([VNRecognizeTextRequest()])
    

    处理分享扩展中的共享内容

    func receivedContent(content: [Any]) {
        for item in content {
            if let text = item as? String {
                // 处理文本
            } else if let image = item as? UIImage {
                // 处理图片
            }
        }
    }
    

    URL Schemes

    您需要在Info.plist中定义一个URL Schemes,以便其他应用(如快捷指令)可以通过URL Schemes与您的App通信。

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.yourcompany.yourapp</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>yourapp</string>
            </array>
        </dict>
    </array>
    

    然后,您可以在App中处理传入的URL来打开指定页面。

    参考资料

    请注意,以上代码仅为示例,您需要根据您的具体需求进行调整和完善。如果您需要更详细的代码实现或遇到具体问题,建议查阅Apple的官方文档或在开发者社区中寻求帮助。

    展开全部

    评论 编辑记录
  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-26 05:09
    关注

    引自免费微信小程序:皆我百晓生

    在iOS开发中,为了实现这个功能,你需要做两部分工作:首先,在你的应用程序中设置一个Universal Link(通用链接)或Custom URL Scheme(自定义URL方案),以便快捷指令可以调用你的应用并传递数据;其次,处理截屏后的图片和文本信息。

    以下是详细的步骤:

    1. 设置通用链接(Universal Links)

    通用链接允许用户点击一个链接直接打开相应的App,而不是在Safari中打开。这需要服务器端的支持以及苹果开发者账号。

    a. 配置Web服务器

    确保你的网站根目录有一个名为.well-known/apple-app-site-association的文件,内容如下:

    {
        "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "TEAM_ID.BUNDLE_IDENTIFIER",
                    "paths": ["/path/to/open"]
                }
            ]
        }
    }
    

    替换 TEAM_ID 为你的团队ID,BUNDLE_IDENTIFIER 为你的应用包名。

    b. 在Apple Developer Account中注册App ID

    登录到Apple Developer Account,进入"Certificates, Identifiers & Profiles",创建一个新的App ID,选择"Identifiers" -> "App IDs" -> "+ 添加App ID",填写相关信息。

    c. 开启关联性

    选中刚创建的App ID,找到" Associated Domains" 标签,开启它,然后添加以下值:

    applinks:yourwebsite.com/path/to/open
    

    d. 提交审核

    在App Store Connect中,选择你的应用,进入"Info"标签页,勾选"Associated Domains",输入同样的值:

    applinks:yourwebsite.com/path/to/open
    

    保存并提交更新等待审核。

    2. 设置自定义URL Scheme

    如果你的App不支持通用链接,可以使用自定义URL Scheme。用户可以通过这种方式打开特定的应用并传递数据。

    a. 在Info.plist中配置URL Types

    在项目的Info.plist文件中,添加一个新的键值对:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.yourcompany.yourapp</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>yourcustomscheme</string>
            </array>
        </dict>
    </array>
    

    替换 com.yourcompany.yourappyourcustomscheme 为你自己的应用标识符和自定义URL Scheme名称。

    3. 处理截屏后的图片和文本信息

    在你的应用中,你需要监听打开的URL,并解析其中的数据。通常在AppDelegate.m 或 AppDelegate.swift 文件中处理。

    Swift 示例

    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
            if let customUrl = url.scheme == "yourcustomscheme" || url.host == "yourwebsite.com/path/to/open" {
                // 解析url.query获取截屏后的数据
                guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true),
                      let queryItems = components.queryItems else { return false }
    
                var textFromImage: String?
                for item in queryItems {
                    switch item.name {
                    case "text":
                        textFromImage = item.value
                    default:
                        break
                    }
                }
    
                // 打开指定页面
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewControllerClass
                viewController.textFromImage = textFromImage
                window?.rootViewController = viewController
                window?.makeKeyAndVisible()
    
                return true
            }
            return false
        }
    
        // 其他AppDelegate方法...
    }
    

    Objective-C 示例

    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @end
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        return YES;
    }
    
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        if ([url.scheme isEqualToString:@"yourcustomscheme"] || [[url host] isEqualToString:@"yourwebsite.com/path/to/open"]) {
            // 解析url.query获取截屏后的数据
            NSArray *queryItems = [url queryItems];
            NSString *textFromImage = nil;
            for (NSURLQueryItem *item in queryItems) {
                if ([item.name isEqualToString:@"text"]) {
                    textFromImage = item.value;
                    break;
                }
            }
    
            // 打开指定页面
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
            UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"YourViewControllerIdentifier"];
            [(YourViewControllerClass *)viewController setTextFromImage:textFromImage];
            self.window.rootViewController = viewController;
            [self.window makeKeyAndVisible];
    
            return YES;
        }
        return NO;
    }
    
    // 其他AppDelegate方法...
    
    @end
    

    4. 快捷指令设置

    现在你的应用已经准备好了接收截屏后的数据,接下来是设置快捷指令。

    a. 创建新快捷指令

    打开快捷指令APP,点击右上角的"+"号,选择"空白模板"。

    b. 添加动作

    1. 添加"获取屏幕快照"动作。
    2. 添加"从截屏中提取文本"动作。
    3. 使用"文本操作"动作,例如"分割字符串",将提取的文本按需处理。
    4. 添加"发送通知"动作,用于测试是否能接收到文本信息。
    5. 添加"设定变量"动作,将处理后的文本存储到变量中。
    6. 最后,添加"打开App"动作,输入你的应用的通用链接或自定义URL Scheme。

    c. 设置打开App动作的参数

    如果你使用通用链接,设置URL为:

    https://yourwebsite.com/path/to/open?text=YOUR_EXTRACTED_TEXT
    

    如果是自定义URL Scheme,设置URL为:

    yourcustomscheme://?text=YOUR_EXTRACTED_TEXT
    

    确保替换 YOUR_EXTRACTED_TEXT 为之前存储在变量中的文本。

    现在,当用户执行这个快捷指令后,截屏后的文本会被发送到你的应用,然后应用会根据接收到的信息打开指定页面。

    注意:以上代码示例可能需要根据你的实际项目结构进行调整。同时,确保在Swift或Objective-C中正确导入所需框架。

    展开全部

    评论 编辑记录
  • 百锦再@新空间 全栈领域优质创作者 2024-05-26 05:10
    关注

    //在iOS开发中,要实现从快捷指令截屏后将图片或文本传递给自己的App并打开指定页面,可以通过以下步骤://1. 在自己的App中注册一个URL Scheme, 用于接收从快捷指令传递过来的数据,并打开指定页面。(例如: myapp://openPage)//2. 在用于截屏的快捷指令中,添加一个动作,将截屏后的图片或文本通过URL Scheme传递给自己的App。(例如:使用"
    Open URLs"
    动作,并设置URL为"
    myapp://openPage?image=imageData"
    )//3. 在自己的App中,实现AppDelegate中的方法application(_:open:options:)来接收从快捷指令传递过来的数据,并处理打开指定页面的逻辑。//以下是一个示例代码:
    //在AppDelegate.swift文件中添加如下代码:import UIKit
    @UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) ->
    Bool {//检查传递过来的URL是否是自己App注册的URL Schemeguard let urlString = url.absoluteString.components(separatedBy: "
    :"
    ).first else {return false}if urlString == "
    myapp"
    {//获取传递过来的数据if let imageString = url.query {//处理传递过来的图片数据let image = UIImage(data: Data(base64Encoded: imageString)!)//在这里打开指定页面,展示传递过来的图片return true}//如果传递过来的是文本数据,可以通过URL的query参数获取,并进行处理}return false}}

    这样就可以实现从快捷指令截屏后将图片或文本传递给自己的App并打开指定页面的功能。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    评论
  • songsong3729 2025-01-06 03:46
    关注

    您好,请问楼主问题解决了,我也遇到这个问题啦😭

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部