{"id":417,"date":"2022-11-28T13:22:02","date_gmt":"2022-11-28T05:22:02","guid":{"rendered":"https:\/\/iichen.cn\/?p=417"},"modified":"2022-11-28T13:22:02","modified_gmt":"2022-11-28T05:22:02","slug":"android-%e5%a6%82%e4%bd%95%e5%88%a4%e6%96%adactivity-%e4%b8%8a%e6%98%af%e5%90%a6%e6%9c%89%e5%bc%b9%e7%aa%97%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/iichen.cn\/?p=417","title":{"rendered":"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f"},"content":{"rendered":"<ul>\n<li>Activity \u5728 attach \u9636\u6bb5\u521b\u5efa\u4e86 PhoneWindow\uff0c\u5e76\u5c06 AppToken \u5b58\u50a8\u5230 PhoneWindow \u4e2d\uff0c\u7136\u540e\u901a\u8fc7 createLocalWindowManager \u521b\u5efa\u4e86\u4e00\u4e2a\u672c\u5730\u7684 WindowManager\uff0c\u8be5\u5b9e\u4f8b\u662f WindowManagerImpl\uff0c\u6784\u9020\u4f20\u5165\u7684 parentWindow \u4e3a PhoneWindow\u3002\u5728 onResume \u9636\u6bb5\u65f6\uff0c\u4ece PhoneWindow \u4e2d\u83b7\u53d6 WindowManager \u6765 addView\u3002<\/p>\n<\/li>\n<li>\n<p>Dialog \u6709\u81ea\u5df1\u7684 PhoneWindow\uff0c\u4f46 Dialog \u5e76\u6ca1\u6709\u4ece PhoneWindow \u4e2d\u53bb get WindowManager\uff0c\u800c\u662f\u76f4\u63a5\u4f7f\u7528 getSystemService \u62ff\u5230 Activity \u7684 WindowManager \u6765 addView\u3002<\/p>\n<\/li>\n<li>\n<p>PopWindow \u5185\u90e8\u662f\u901a\u8fc7 getSystemService \u6765\u62ff\u5230 Activity WindowManager + \u5185\u7f6e\u5b50\u7a97\u53e3 type \u6765\u5b9e\u73b0\u7684\u5f39\u6846\u3002<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-java line-numbers\">internal class FloatingActivityLifecycle : Application.ActivityLifecycleCallbacks {\n\n    private val mActivities = ArrayList&lt;Activity&gt;()\n\n    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {\n        mActivities.add(activity)\n    }\n\n    override fun onActivityStarted(activity: Activity) {\n    }\n\n    override fun onActivityResumed(activity: Activity) {\n    }\n\n    override fun onActivityPaused(activity: Activity) {\n    }\n\n    override fun onActivityStopped(activity: Activity) {\n    }\n\n    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {\n    }\n\n    override fun onActivityDestroyed(activity: Activity) {\n        mActivities.remove(activity)\n    }\n\n\n    fun getActivities(): List&lt;Activity&gt; {\n        return mActivities.toList()\n    }\n}\n<\/code><\/pre>\n<pre><code class=\"language-java line-numbers\">object FloatingWindowManager {\n\n    private val lifecycle by lazy {\n        FloatingActivityLifecycle()\n    }\n\n    @JvmStatic\n    fun init(context: Application) {\n        context.registerActivityLifecycleCallbacks(lifecycle)\n    }\n\n\n    \/**\n     * WindowManagerGlobal mViews:\n     *\n     * 0\u3001Ac:------\n     * 1\u3001-- Dialog\n     * 2\u3001-- Dialog\n     * 3\u3001Ac:------\n     * 4\u3001Ac:------\n     *\/\n    fun hasFloatingWindowByView(activity: Activity): Boolean {\n        return getFloatWindowViewByView(activity).isNotEmpty()\n    }\n\n\n    fun getFloatWindowViewByView(activity: Activity): List&lt;View&gt; {\n        val targetDecorView = activity.window.decorView\n        val acDecorViews = lifecycle.getActivities().map { it.window.decorView }.toList()\n        val mView = Window.getViews().map { it }.toList()\n        val targetIndex = mView.first { it == targetDecorView }\n        val index = mView.indexOf(targetIndex)\n        val floatView = arrayListOf&lt;View&gt;()\n        for (i in index + 1 until mView.size) {\n            if (acDecorViews.contains(mView[i])) {\n                break\n            }\n            floatView.add(mView[i])\n        }\n        return floatView\n    }\n\n\n    fun hasFloatWindowByToken(activity: Activity): Boolean {\n        \/\/ \u83b7\u53d6\u76ee\u6807 Activity \u7684 decorView\n        val targetDecorView = activity.window.decorView\n        \/\/ \u83b7\u53d6\u76ee\u6807 Activity \u7684 \u5b50\u7a97\u53e3\u7684 token\n        val targetSubToken = targetDecorView.windowToken\n\n\n        \/\/  \u62ff\u5230 mView \u96c6\u5408\uff0c\u627e\u5230\u76ee\u6807 Activity \u6240\u5728\u7684 index \u4f4d\u7f6e\n        val mView = Window.getViews().map { it }.toList()\n        val targetIndex = mView.indexOfFirst { it == targetDecorView }\n\n        \/\/ \u83b7\u53d6 mParams \u96c6\u5408\n        val mParams = Window.getParams()\n        \/\/ \u6839\u636e\u76ee\u6807 index \u4ece mParams \u96c6\u5408\u4e2d\u627e\u5230\u76ee\u6807 token\n        val targetToken = mParams[targetIndex].token\n\n\n        \/\/ \u904d\u5386\u5224\u65ad\u65f6\uff0c\u76ee\u6807 Activity \u81ea\u5df1\u4e0d\u80fd\u5305\u62ec,\u6240\u4ee5 size \u9700\u8981\u5927\u4e8e 1\n        return mParams\n            .map { it.token }\n            .filter { it == targetSubToken || it == null || it == targetToken }\n            .size &gt; 1\n    }\n\n\n    fun getFloatWindowViewByToken(activity: Activity): List&lt;View&gt; {\n        \/\/ \u83b7\u53d6\u76ee\u6807 Activity \u7684 decorView\n        val targetDecorView = activity.window.decorView\n        \/\/ \u83b7\u53d6\u76ee\u6807 Activity \u7684 \u5b50\u7a97\u53e3\u7684 token\n        val targetSubToken = targetDecorView.windowToken\n\n\n        \/\/  \u62ff\u5230 mView \u96c6\u5408\uff0c\u627e\u5230\u76ee\u6807 Activity \u6240\u5728\u7684 index \u4f4d\u7f6e\n        val mView = Window.getViews().map { it }.toList()\n        val targetIndex = mView.indexOfFirst { it == targetDecorView }\n\n        \/\/ \u83b7\u53d6 mParams \u96c6\u5408\n        val mParams = Window.getParams()\n        \/\/ \u6839\u636e\u76ee\u6807 index \u4ece mParams \u96c6\u5408\u4e2d\u627e\u5230\u76ee\u6807 token\n        val targetToken = mParams[targetIndex].token\n\n\n        val floatView = arrayListOf&lt;View&gt;()\n\n        mParams.forEachIndexed { index, params -&gt;\n            val token = params.token\n            \/\/ Activity \u81ea\u8eab\u4e0d\u53c2\u4e0e\n            if (index != targetIndex) {\n                if (token == targetSubToken || token == null || token == targetToken) {\n                    \/\/ \u6839\u636e index \u62ff\u5230 mView \u4e2d\u7684 View\n                    floatView.add(mView[index])\n                }\n            }\n        }\n        return floatView\n    }\n\n\n}\n<\/code><\/pre>\n<pre><code class=\"language-java line-numbers\">internal object Window {\n\n    private val windowManagerClass by lazy(LazyThreadSafetyMode.NONE) {\n        val className =\n            \"android.view.WindowManagerGlobal\"\n        try {\n            Class.forName(className)\n        } catch (ignored: Throwable) {\n            Log.w(\"WindowManagerSpy\", ignored)\n            null\n        }\n    }\n\n    private val windowManagerInstance by lazy(LazyThreadSafetyMode.NONE) {\n        windowManagerClass?.let { windowManagerClass -&gt;\n            val methodName =\n                \"getInstance\"\n            windowManagerClass.getMethod(methodName).invoke(null)\n        }\n    }\n\n\n    private val mViewsField by lazy(LazyThreadSafetyMode.NONE) {\n        windowManagerClass?.let { windowManagerClass -&gt;\n            windowManagerClass.getDeclaredField(\"mViews\").apply { isAccessible = true }\n        }\n    }\n\n\n    private val mParams by lazy(LazyThreadSafetyMode.NONE) {\n        windowManagerClass?.let { windowManagerClass -&gt;\n            windowManagerClass.getDeclaredField(\"mParams\").apply { isAccessible = true }\n        }\n    }\n\n\n\n    @SuppressLint(\"PrivateApi\", \"ObsoleteSdkInt\", \"DiscouragedPrivateApi\")\n    fun getViews(): List&lt;View&gt; {\n        try {\n            windowManagerInstance?.let { windowManagerInstance -&gt;\n                mViewsField?.let { mViewsField -&gt;\n                    return mViewsField[windowManagerInstance] as ArrayList&lt;View&gt;\n                }\n            }\n        } catch (ignored: Throwable) {\n            Log.w(\"WindowManagerSpy\", ignored)\n        }\n        return arrayListOf()\n    }\n\n    @SuppressLint(\"PrivateApi\", \"ObsoleteSdkInt\", \"DiscouragedPrivateApi\")\n    fun getParams(): List&lt;WindowManager.LayoutParams&gt; {\n        try {\n            windowManagerInstance?.let { windowManagerInstance -&gt;\n                mParams?.let { mViewsField -&gt;\n                    return mViewsField[windowManagerInstance] as ArrayList&lt;WindowManager.LayoutParams&gt;\n                }\n            }\n        } catch (ignored: Throwable) {\n            Log.w(\"WindowManagerSpy\", ignored)\n        }\n        return arrayListOf()\n    }\n\n}\n<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg'><img class=\"lazyload lazyload-style-11\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<blockquote><p>\n  <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/MRwangqi\/FloatingWindow\" title=\"\u6e90github\u5730\u5740\">\u6e90github\u5730\u5740<\/a><br \/>\n  <a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/github.com\/18805699674\/FloatingWindow\" title=\"fork\u5730\u5740\">fork\u5730\u5740<\/a>\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Activity \u5728 attach \u9636\u6bb5\u521b\u5efa\u4e86 PhoneWindow\uff0c\u5e76\u5c06 AppToken \u5b58\u50a8\u5230 Pho [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,8],"tags":[],"class_list":["post-417","post","type-post","status-publish","format-standard","hentry","category-android","category-8"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f - IIchen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/iichen.cn\/?p=417\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f - IIchen\" \/>\n<meta property=\"og:description\" content=\"Activity \u5728 attach \u9636\u6bb5\u521b\u5efa\u4e86 PhoneWindow\uff0c\u5e76\u5c06 AppToken \u5b58\u50a8\u5230 Pho [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/iichen.cn\/?p=417\" \/>\n<meta property=\"og:site_name\" content=\"IIchen\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-28T05:22:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg\" \/>\n<meta name=\"author\" content=\"iichen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"iichen\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/iichen.cn\/?p=417#article\",\"isPartOf\":{\"@id\":\"https:\/\/iichen.cn\/?p=417\"},\"author\":{\"name\":\"iichen\",\"@id\":\"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c\"},\"headline\":\"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f\",\"datePublished\":\"2022-11-28T05:22:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/iichen.cn\/?p=417\"},\"wordCount\":33,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c\"},\"image\":{\"@id\":\"https:\/\/iichen.cn\/?p=417#primaryimage\"},\"thumbnailUrl\":\"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg\",\"articleSection\":[\"Android\",\"\u7b14\u8bb0\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/iichen.cn\/?p=417#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/iichen.cn\/?p=417\",\"url\":\"https:\/\/iichen.cn\/?p=417\",\"name\":\"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f - IIchen\",\"isPartOf\":{\"@id\":\"https:\/\/iichen.cn\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/iichen.cn\/?p=417#primaryimage\"},\"image\":{\"@id\":\"https:\/\/iichen.cn\/?p=417#primaryimage\"},\"thumbnailUrl\":\"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg\",\"datePublished\":\"2022-11-28T05:22:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/iichen.cn\/?p=417#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/iichen.cn\/?p=417\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/iichen.cn\/?p=417#primaryimage\",\"url\":\"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg\",\"contentUrl\":\"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/iichen.cn\/?p=417#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/iichen.cn\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/iichen.cn\/#website\",\"url\":\"https:\/\/iichen.cn\/\",\"name\":\"IIchen\",\"description\":\"Just do it!\",\"publisher\":{\"@id\":\"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/iichen.cn\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c\",\"name\":\"iichen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/iichen.cn\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/iichen.cn\/wp-content\/uploads\/2025\/01\/avatar.jpg\",\"contentUrl\":\"https:\/\/iichen.cn\/wp-content\/uploads\/2025\/01\/avatar.jpg\",\"width\":940,\"height\":940,\"caption\":\"iichen\"},\"logo\":{\"@id\":\"https:\/\/iichen.cn\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.iichen.cn\"],\"url\":\"https:\/\/iichen.cn\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f - IIchen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/iichen.cn\/?p=417","og_locale":"zh_CN","og_type":"article","og_title":"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f - IIchen","og_description":"Activity \u5728 attach \u9636\u6bb5\u521b\u5efa\u4e86 PhoneWindow\uff0c\u5e76\u5c06 AppToken \u5b58\u50a8\u5230 Pho [&hellip;]","og_url":"https:\/\/iichen.cn\/?p=417","og_site_name":"IIchen","article_published_time":"2022-11-28T05:22:02+00:00","og_image":[{"url":"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg","type":"","width":"","height":""}],"author":"iichen","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"iichen","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/iichen.cn\/?p=417#article","isPartOf":{"@id":"https:\/\/iichen.cn\/?p=417"},"author":{"name":"iichen","@id":"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c"},"headline":"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f","datePublished":"2022-11-28T05:22:02+00:00","mainEntityOfPage":{"@id":"https:\/\/iichen.cn\/?p=417"},"wordCount":33,"commentCount":0,"publisher":{"@id":"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c"},"image":{"@id":"https:\/\/iichen.cn\/?p=417#primaryimage"},"thumbnailUrl":"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg","articleSection":["Android","\u7b14\u8bb0"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/iichen.cn\/?p=417#respond"]}]},{"@type":"WebPage","@id":"https:\/\/iichen.cn\/?p=417","url":"https:\/\/iichen.cn\/?p=417","name":"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f - IIchen","isPartOf":{"@id":"https:\/\/iichen.cn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/iichen.cn\/?p=417#primaryimage"},"image":{"@id":"https:\/\/iichen.cn\/?p=417#primaryimage"},"thumbnailUrl":"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg","datePublished":"2022-11-28T05:22:02+00:00","breadcrumb":{"@id":"https:\/\/iichen.cn\/?p=417#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/iichen.cn\/?p=417"]}]},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/iichen.cn\/?p=417#primaryimage","url":"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg","contentUrl":"https:\/\/iichen.cn\/wp-content\/uploads\/2022\/11\/2022-11-28-300x96.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/iichen.cn\/?p=417#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/iichen.cn\/"},{"@type":"ListItem","position":2,"name":"Android-\u5982\u4f55\u5224\u65adActivity \u4e0a\u662f\u5426\u6709\u5f39\u7a97\uff1f"}]},{"@type":"WebSite","@id":"https:\/\/iichen.cn\/#website","url":"https:\/\/iichen.cn\/","name":"IIchen","description":"Just do it!","publisher":{"@id":"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/iichen.cn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":["Person","Organization"],"@id":"https:\/\/iichen.cn\/#\/schema\/person\/4a47edf85ab49841df9e8f6aee40b77c","name":"iichen","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/iichen.cn\/#\/schema\/person\/image\/","url":"https:\/\/iichen.cn\/wp-content\/uploads\/2025\/01\/avatar.jpg","contentUrl":"https:\/\/iichen.cn\/wp-content\/uploads\/2025\/01\/avatar.jpg","width":940,"height":940,"caption":"iichen"},"logo":{"@id":"https:\/\/iichen.cn\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.iichen.cn"],"url":"https:\/\/iichen.cn\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/iichen.cn\/index.php?rest_route=\/wp\/v2\/posts\/417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iichen.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iichen.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iichen.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iichen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=417"}],"version-history":[{"count":0,"href":"https:\/\/iichen.cn\/index.php?rest_route=\/wp\/v2\/posts\/417\/revisions"}],"wp:attachment":[{"href":"https:\/\/iichen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iichen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iichen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}