{"id":14400,"date":"2024-08-21T11:20:18","date_gmt":"2024-08-21T03:20:18","guid":{"rendered":"http:\/\/xinyiworld.top\/wordpress_it\/?p=14400"},"modified":"2024-08-21T15:42:14","modified_gmt":"2024-08-21T07:42:14","slug":"networkmanagementservice%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86%e6%9c%8d%e5%8a%a1","status":"publish","type":"post","link":"http:\/\/xinyiworld.top\/wordpress_it\/?p=14400","title":{"rendered":"NetworkManagementService(\u7f51\u7edc\u7ba1\u7406\u670d\u52a1)"},"content":{"rendered":"<p>\u6e90\u7801\u4f4d\u7f6e\uff1a<code>frameworks\/base\/services\/core\/java\/com\/android\/server\/NetworkManagementService.java<\/code><\/p>\n<h2>\u542f\u52a8<\/h2>\n<p>\u89c1SystemServer.java<\/p>\n<pre><code class=\"language-java\">1291             traceBeginAndSlog(&quot;StartNetworkManagementService&quot;);\n1292             try {\n1293                 networkManagement = NetworkManagementService.create(context);\n1294                 ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);\n1295             } catch (Throwable e) {\n1296                 reportWtf(&quot;starting NetworkManagement Service&quot;, e);\n1297             }\n1298             traceEnd();<\/code><\/pre>\n<h3>\u521b\u5efa<\/h3>\n<pre><code class=\"language-java\"> 280     static NetworkManagementService create(Context context, SystemServices services)\n 281             throws InterruptedException {\n 282         final NetworkManagementService service =\n 283                 new NetworkManagementService(context, services);\n 284         if (DBG) Slog.d(TAG, &quot;Creating NetworkManagementService&quot;);\n 285         if (DBG) Slog.d(TAG, &quot;Connecting native netd service&quot;);\n 286         service.connectNativeNetdService();\n 287         if (DBG) Slog.d(TAG, &quot;Connected&quot;);\n 288         return service;\n 289     }\n 290 \n 291     public static NetworkManagementService create(Context context) throws InterruptedException {\n 292         return create(context, new SystemServices());\n 293     }<\/code><\/pre>\n<p>SystemServices\u4e3aNetworkManagementService\u7684\u5185\u90e8\u7c7b\uff1a<\/p>\n<pre><code class=\"language-java\"> 123     static class SystemServices {\n 124         public IBinder getService(String name) {\n 125             return ServiceManager.getService(name);\n 126         }\n 127         public void registerLocalService(NetworkManagementInternal nmi) {\n 128             LocalServices.addService(NetworkManagementInternal.class, nmi);\n 129         }\n 130         public INetd getNetd() {\n 131             return NetdService.get();\n 132         }\n 133     }<\/code><\/pre>\n<h2>\u65b9\u6cd5<\/h2>\n<ul>\n<li>\n<p>connectNativeNetdService<br \/>\n\u83b7\u53d6NetdService\u670d\u52a1<\/p>\n<pre><code class=\"language-java\">513     private void connectNativeNetdService() {\n514         mNetdService = mServices.getNetd();\n515         try {\n516             mNetdService.registerUnsolicitedEventListener(mNetdUnsolicitedEventListener);\n517             if (DBG) Slog.d(TAG, &quot;Register unsolicited event listener&quot;);\n518         } catch (RemoteException | ServiceSpecificException e) {\n519             Slog.e(TAG, &quot;Failed to set Netd unsolicited event listener &quot; + e);\n520         }\n521     }<\/code><\/pre>\n<\/li>\n<li>\n<p>listInterfaces\uff08\u5217\u51fa\u7f51\u53e3\uff09<\/p>\n<pre><code class=\"language-java\">740     \/\/\n741     \/\/ INetworkManagementService members\n742     \/\/\n743     @Override\n744     public String[] listInterfaces() {\n745         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);\n746         try {\n747             return mNetdService.interfaceGetList();\n748         } catch (RemoteException | ServiceSpecificException e) {\n749             throw new IllegalStateException(e);\n750         }\n751     }<\/code><\/pre>\n<\/li>\n<\/ul>\n<button class=\"simplefavorite-button\" data-postid=\"14400\" data-siteid=\"1\" data-groupid=\"1\" data-favoritecount=\"0\" style=\"\">\u6536\u85cf <i class=\"sf-icon-star-empty\"><\/i><\/button>","protected":false},"excerpt":{"rendered":"<p>\u6e90\u7801\u4f4d\u7f6e\uff1aframeworks\/base\/services\/core\/java\/com\/androi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1098],"tags":[],"_links":{"self":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/14400"}],"collection":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14400"}],"version-history":[{"count":7,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/14400\/revisions"}],"predecessor-version":[{"id":14407,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/14400\/revisions\/14407"}],"wp:attachment":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14400"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}