{"id":7681,"date":"2019-09-04T10:00:29","date_gmt":"2019-09-04T01:00:29","guid":{"rendered":"https:\/\/www.gigas-jp.com\/appnews\/?p=7681"},"modified":"2019-09-03T18:54:51","modified_gmt":"2019-09-03T09:54:51","slug":"android%e3%81%a7%e4%bd%8d%e7%bd%ae%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.gigas-jp.com\/appnews\/archives\/7681","title":{"rendered":"Android\u3067\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b"},"content":{"rendered":"\n<p>Android\u3067\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u306e\u52c9\u5f37\u3092\u517c\u306d\u3066Kotlin\u3067\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n<p><!--more--><\/p>\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"1024\" height=\"728\" src=\"\/appnews\/wp-content\/uploads\/sites\/4\/2019\/09\/Screenshot_20190903-172251-2-1024x728.jpg\" alt=\"\" class=\"wp-image-7705\" srcset=\"https:\/\/www.gigas-jp.com\/appnews\/wp-content\/uploads\/sites\/4\/2019\/09\/Screenshot_20190903-172251-2-1024x728.jpg 1024w, https:\/\/www.gigas-jp.com\/appnews\/wp-content\/uploads\/sites\/4\/2019\/09\/Screenshot_20190903-172251-2.jpg 1048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p> GooglePlayServices API\u7fa4\u306eFusedLocationProviderClient\u3092\u4f7f\u3044\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<br>\u9045\u5ef6\u30eb\u30fc\u30d7\u30675\u79d2\u3054\u3068\u306b\u753b\u9762\u306b\u73fe\u5728\u306e\u6642\u523b\u3068\u7def\u5ea6\u7d4c\u5ea6\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MainActivity : AppCompatActivity() {\n\n    private val UPDATE_GPS_FREQ_SEC = Util.secToMilli(1) \/\/1\u79d2\u3054\u3068\u306b\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\n    private val UPDATE_GPS_FREQ_DIS: Long = 0 \/\/\u52d5\u304b\u306a\u304f\u3066\u3082\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\n\n    \/\/ \u8981\u6c42\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\n    private val LOCATION_PERMISSIONS =\n        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)\n\n    \/\/ \u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8981\u6c42\u8b58\u5225\u30b3\u30fc\u30c9\n    private val REQUEST_CODE_LOCATION_PERMISSION = 1\n\n    \/\/ \u8a2d\u5b9a\u60c5\u5831\u306e\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u306e\u8b58\u5225\u30b3\u30fc\u30c9\n    private val REQUEST_CODE_CHECK_SETTINGS = 2\n\n\n    \/\/ \u8a2d\u5b9a\u7528\u30af\u30e9\u30a2\u30f3\u30c8\n    private lateinit var mSettingsClient:SettingsClient\n\n    \/\/ \u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\n    private lateinit var mFusedLocationProviderClient:FusedLocationProviderClient\n\n    \/\/ \u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u30ea\u30af\u30a8\u30b9\u30c8\u7528\n    private lateinit var mLocationRequest:LocationRequest\n\n    \/\/ \u9045\u5ef6\u30eb\u30fc\u30d7\u7528\n    private lateinit var mHandler: Handler\n    private lateinit var mUpdateLocation:Runnable\n\n    \/\/ \u753b\u9762\u8868\u793a\u7528\n    private lateinit var mLogger:Logger\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        mSettingsClient = SettingsClient(this)\n\n        mLogger = Logger(this)\n\n        mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)\n\n        mLocationRequest = LocationRequest()\n\n        setContentView(mLogger.getOutPutView())\n\n        mHandler = Handler()\n\n        \/\/ 5\u79d2\u3054\u3068\u306b\u6700\u5f8c\u306b\u53d6\u5f97\u3057\u305f\u4f4d\u7f6e\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\u30eb\u30fc\u30d7\n        mUpdateLocation = Runnable {\n            saveLastKnownLocation()\n            mHandler.postDelayed(mUpdateLocation, Util.secToMilli(5))\n        }\n\n        \/\/ \u6a29\u9650\u3092\u78ba\u8a8d\u3001\u5fc5\u8981\u306a\u3089\u53d6\u5f97\u3057\u3001\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u958b\u59cb\n        permissionCheckStart()\n    }\n\n    override fun onPause() {\n        super.onPause()\n\n        \/\/ \u9045\u5ef6\u30eb\u30fc\u30d7\u505c\u6b62\n        mHandler.removeCallbacks(mUpdateLocation)\n    }<\/code><\/pre>\n\n\n\n<p>\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u78ba\u8a8d\u3092\u884c\u3044\u3001<br>\u672a\u8a31\u53ef\u306a\u3089\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a\u3057\u8a31\u53ef\u3057\u3066\u3082\u3089\u3046\u3002<br>\u305d\u306e\u5f8c\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u5fdc\u3059\u308b\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u5fc5\u8981\u306a\u8a2d\u5b9a\u304c\u306a\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u3001<br>\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a\u3057\u8a2d\u5b9a\u5909\u66f4\u3092\u8a31\u53ef\u3057\u3066\u3082\u3089\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/**\n     * \u73fe\u5728\u4f4d\u7f6e\u53d6\u5f97\u306e\u6a29\u9650\u306e\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3044\u65e2\u306b\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u958b\u59cb\u3002\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u30e6\u30fc\u30b6\u30fc\u306b\u8a31\u53ef\u3092\u6c42\u3081\u308b\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a\u3002\n     *\/\n    private fun permissionCheckStart() {\n        val permissionRequests = LOCATION_PERMISSIONS\n        val permissionCheck =\n            ContextCompat.checkSelfPermission(\n            this,\n            LOCATION_PERMISSIONS[0]\n        ) != PackageManager.PERMISSION_GRANTED &amp;&amp;\n            ContextCompat.checkSelfPermission(\n            this,\n            LOCATION_PERMISSIONS[1]\n        ) != PackageManager.PERMISSION_GRANTED\n        if (permissionCheck) {\n            \/\/ \u6a29\u9650\u8981\u6c42\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a\n            ActivityCompat.requestPermissions(this, permissionRequests, REQUEST_CODE_LOCATION_PERMISSION)\n\n        } else {\n            \/\/ \u3059\u3067\u306b\u8a31\u53ef\u6e08\u307f\n            checkLocationSettings()\n        }\n    }\n\n    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array&lt;String>, grantResults: IntArray) {\n        if (requestCode == REQUEST_CODE_LOCATION_PERMISSION) {\n            if (\n                grantResults.size == 2 &amp;&amp;\n                grantResults[0] == PackageManager.PERMISSION_GRANTED ||\n                grantResults[1] == PackageManager.PERMISSION_GRANTED\n            ) {\n                \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7d50\u679c\uff1a\u6210\u529f\n                \/\/ \u5fc5\u8981\u306a\u8a2d\u5b9a\u306e\u78ba\u8a8d\u3092\u884c\u3046\n                checkLocationSettings()\n            } else {\n                \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7d50\u679c\uff1a\u5931\u6557\n                if (ActivityCompat.shouldShowRequestPermissionRationale(\n                        this,\n                        LOCATION_PERMISSIONS[0]\n                    ) || ActivityCompat.shouldShowRequestPermissionRationale(this, LOCATION_PERMISSIONS[1])\n                ) {\n                    \/\/ \u518d\u5ea6\u6a29\u9650\u8981\u6c42\n                    permissionCheckStart()\n                } else {\n                    \/\/ \u5229\u7528\u8005\u304c\u518d\u8868\u793a\u3057\u306a\u3044\u3092\u9078\u3093\u3060\u5834\u5408\n                    finish()\n                }\n            }\n        }\n    }\n\n    \/**\n     * \u5fc5\u8981\u306a\u8a2d\u5b9a\u306e\u78ba\u8a8d\u3092\u884c\u3046\n     *\/\n    private fun checkLocationSettings() {\n        val request = LocationSettingsRequest.Builder()\n            .addLocationRequest(buildLocationRequest())\n            .setAlwaysShow(true)\n            .build()\n        mSettingsClient.checkLocationSettings(request)\n            .addOnCompleteListener(OnCompleteListener&lt;LocationSettingsResponse> { task ->\n                try {\n                    \/\/ \u3053\u3053\u3067\u4f8b\u5916\u304c\u767a\u751f\u3057\u306a\u3051\u308c\u3070\u6210\u529f\n                    val response = task.getResult(ApiException::class.java)\n\n                    \/\/ \u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u306e\u958b\u59cb\n                    startUpdatingLocation()\n\n                } catch (apiException: ApiException) {\n                    \/\/ \u4f8b\u5916\u304c\u767a\u751f\u3057\u305f\u306e\u3067\u5931\u6557\n                    when (apiException.statusCode) {\n                        LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> {\n                            \/\/ \u8981\u6c42\u3059\u308b\u8a2d\u5b9a\u304c\u8db3\u308a\u3066\u3044\u306a\u3044\n                            try {\n                                \/\/ \u8a2d\u5b9a\u8981\u6c42\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a\n                                val resolvable = apiException as ResolvableApiException\n                                resolvable.startResolutionForResult(\n                                    this@MainActivity,\n                                    REQUEST_CODE_CHECK_SETTINGS\n                                )\n                            } catch (e: Exception) {\n                                \/\/ \u30c0\u30a4\u30a2\u30ed\u30b0\u304c\u8868\u793a\u3067\u304d\u306a\u304b\u3063\u305f\u30a8\u30e9\u30fc\n                                finish()\n                            }\n                        }\n\n                        LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {\n                            \/\/ \u8981\u6c42\u3059\u308b\u8a2d\u5b9a\u304c\u8db3\u308a\u3066\u3044\u306a\u3044\u304c\u3001\u8a2d\u5b9a\u306e\u5909\u66f4\u3092\u884c\u308f\u306a\u3044\n                            finish()\n                        }\n                    }\n                }\n            })\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n        if(requestCode == REQUEST_CODE_CHECK_SETTINGS)\n        {\n            \/\/ checkLocationSettings()\u3067\u8a2d\u5b9a\u5909\u66f4\u3092\u4fc3\u3059\u30c0\u30a4\u30a2\u30ed\u30b0\u3067OK\u3092\u9078\u3093\u3060\u5834\u5408\u3053\u3053\u306b\u6765\u308b\n            \/\/ \u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u306e\u958b\u59cb\n            startUpdatingLocation()\n        }\n    }\n\n    \/**\n     * \u4f4d\u7f6e\u60c5\u5831\u7528\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u30c1\u30a7\u30c3\u30af\u95a2\u6570\n     * @param context\n     * @return \u30c1\u30a7\u30c3\u30afOK:\u771f\u3000NG:\u507d\n     *\/\n    private fun checkPermission(context: Context): Boolean {\n        if (ActivityCompat.checkSelfPermission(\n                context,\n                Manifest.permission.ACCESS_FINE_LOCATION\n            ) == PackageManager.PERMISSION_GRANTED ||\n            ActivityCompat.checkSelfPermission(\n                context,\n                Manifest.permission.ACCESS_COARSE_LOCATION\n            ) == PackageManager.PERMISSION_GRANTED\n        ) {\n            return true\n        }\n        return false\n    }<\/code><\/pre>\n\n\n\n<p>\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u78ba\u8a8d\u3068\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u5fdc\u3059\u308b\u8a2d\u5b9a\u306e\u78ba\u8a8d\u304c\u7d42\u308f\u3063\u305f\u3089 <br>5\u79d2\u3054\u3068\u306b\u6700\u5f8c\u306b\u53d6\u5f97\u3057\u305f\u4f4d\u7f6e\u60c5\u5831\u3092\u753b\u9762\u306b\u8868\u793a\u3059\u308b\u30eb\u30fc\u30d7\u3092\u958b\u59cb\u3057\u3001 <br>FusedLocationProviderClient\u306erequestLocationUpdates\u30e1\u30bd\u30c3\u30c9\u3067\u4f4d\u7f6e\u60c5\u5831\u306e\u53d6\u5f97\u3092\u958b\u59cb\u3057\u307e\u3059\u3002<br>\u4f4d\u7f6e\u60c5\u5831\u306e\u66f4\u65b0\u6642\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3067\u306f\u3001\u6587\u5b57\u5217\u3092\u753b\u9762\u306b\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/**\n     * \u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u306e\u958b\u59cb\n     *\/\n    private fun startUpdatingLocation() {\n\n        \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u7d44\u307f\u7acb\u3066\n        mLocationRequest = buildLocationRequest()\n\n        \/\/ \u4f4d\u7f6e\u60c5\u5831\u7528\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u30c1\u30a7\u30c3\u30af\n        if (checkPermission(this)) {\n            \/\/ \u4f4d\u7f6e\u60c5\u5831\u306e\u53d6\u5f97\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\n            mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null)\n            \/\/ \u9045\u5ef6\u30eb\u30fc\u30d7\u958b\u59cb\n            mHandler.post(mUpdateLocation)\n        }\n    }\n\n    \/\/ \u4f4d\u7f6e\u60c5\u5831\u66f4\u65b0\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\n    private val mLocationCallback = object : LocationCallback() {\n        override fun onLocationResult(locationResult: LocationResult?) {\n            super.onLocationResult(locationResult)\n            mLogger.d(\"Change_Location\")\n        }\n    }\n\n    \/**\n     * \u30ea\u30af\u30a8\u30b9\u30c8\u7d44\u307f\u7acb\u3066\u7528\u95a2\u6570\n     * @return \u7d44\u307f\u7acb\u3066\u305f\u30ea\u30af\u30a8\u30b9\u30c8\n     *\/\n    private fun buildLocationRequest(): LocationRequest {\n        val req = LocationRequest();\n        req.priority = LocationRequest.PRIORITY_HIGH_ACCURACY\n        req.interval = UPDATE_GPS_FREQ_SEC * 2\n        req.fastestInterval = UPDATE_GPS_FREQ_SEC\n        req.smallestDisplacement = UPDATE_GPS_FREQ_DIS * 1.0f\n        return req\n    }\n\n    \/**\n     * \u6700\u5f8c\u306b\u53d6\u5f97\u3057\u305f\u4f4d\u7f6e\u60c5\u5831\u3092\u8868\u793a\n     *\/\n    private fun saveLastKnownLocation() {\n        if (checkPermission(this)) {\n            mFusedLocationProviderClient.lastLocation.addOnSuccessListener { location ->\n                if (Util.notNull(location)) {\n                    val timeStump = Calendar.getInstance().timeInMillis\n                    val lat = location.latitude\n                    val lon = location.longitude\n\n                    output(timeStump, lat, lon)\n                }\n            }\n        }\n    }<\/code><\/pre>\n\n\n\n<p>output\u306f\u753b\u9762\u8868\u793a\u7528\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/**\n     * \u30ed\u30b0\u3092\u8868\u793a\n     * @param timeStump\n     * @param lat\n     * @param lon\n     *\/\n    private fun output(timeStump: Long, lat: Double, lon: Double) {\n        val formatter = SimpleDateFormat(\"HH:mm:ss\")\n        formatter.timeZone = Calendar.getInstance().timeZone\n        val timeFormatted = formatter.format(timeStump)\n        val address = Util.getAddress(this, lat, lon)\n        val out = String.format(\"%s\u3000\u7def\u5ea6:%f\u3000\u7d4c\u5ea6:%f\", timeFormatted, lat, lon)\n        if (Util.notNull(mLogger)) {\n            mLogger.d(out)\n            mLogger.d(address)\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u6700\u65b0\u306e\u60c5\u5831\u306b\u66f4\u65b0\u3055\u308c\u305f\u4f4d\u7f6e\u60c5\u5831\u306e\u53d7\u3051\u53d6\u308a\u306f<br>\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u975e\u540c\u671f\u51e6\u7406\u3067\u884c\u3046\u306e\u3067<br>\u4e00\u5b9a\u6642\u9593\u9593\u9694\u3067\u8868\u793a\u3059\u308b\u306e\u306b\u306f\u5411\u3044\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\u3002<br>\u306a\u306e\u3067\u3001\u753b\u9762\u8868\u793a\u6642\u306e\u6700\u65b0\u306e\u30c7\u30fc\u30bf\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c<br>\u6700\u5f8c\u306b\u66f4\u65b0\u3055\u308c\u305f\u4f4d\u7f6e\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<br>\u4f4d\u7f6e\u60c5\u5831\u306f\u5468\u8fba\u74b0\u5883\u306b\u3082\u5de6\u53f3\u3055\u308c\u307e\u3059\u304c\u305d\u308c\u306a\u308a\u306b\u8aa4\u5dee\u306e\u3042\u308b\u30c7\u30fc\u30bf\u306a\u306e\u3067<br>\u6570\u79d2\u7a0b\u5ea6\u524d\u306e\u30c7\u30fc\u30bf\u3067\u3042\u308c\u3070\u554f\u984c\u306a\u3044\u304b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6c34\u66dc\u62c5\u5f53:Tanaka<\/p>\n<div class='wp_social_bookmarking_light'>\n            <div class=\"wsbl_google_plus_one\"><g:plusone size=\"medium\" annotation=\"none\" href=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/7681\" ><\/g:plusone><\/div>\n            <div class=\"wsbl_hatena_button\"><a href=\"\/\/b.hatena.ne.jp\/entry\/https:\/\/www.gigas-jp.com\/appnews\/archives\/7681\" class=\"hatena-bookmark-button\" data-hatena-bookmark-title=\"Android\u3067\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\" data-hatena-bookmark-layout=\"standard\" title=\"\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0\"> <img src=\"\/\/b.hatena.ne.jp\/images\/entry-button\/button-only@2x.png\" alt=\"\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0\" width=\"20\" height=\"20\" style=\"border: none;\" \/><\/a><script type=\"text\/javascript\" src=\"\/\/b.hatena.ne.jp\/js\/bookmark_button.js\" charset=\"utf-8\" async=\"async\"><\/script><\/div>\n            <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/7681\" data-text=\"Android\u3067\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\" data-via=\"GIGASJAPAN_APPS\" data-lang=\"ja\">Tweet<\/a><\/div>\n            <div class=\"wsbl_facebook_like\"><div id=\"fb-root\"><\/div><fb:like href=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/7681\" layout=\"button_count\" action=\"like\" width=\"100\" share=\"false\" show_faces=\"false\" ><\/fb:like><\/div>\n            <div class=\"wsbl_facebook_send\"><div id=\"fb-root\"><\/div><fb:send href=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/7681\" colorscheme=\"light\" ><\/fb:send><\/div>\n    <\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>Android\u3067\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u65b9\u6cd5\u306e\u52c9\u5f37\u3092\u517c\u306d\u3066Kotlin\u3067\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"author":17,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[119,12],"tags":[],"acf":[],"_links":{"self":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts\/7681"}],"collection":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/comments?post=7681"}],"version-history":[{"count":23,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts\/7681\/revisions"}],"predecessor-version":[{"id":7707,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts\/7681\/revisions\/7707"}],"wp:attachment":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/media?parent=7681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/categories?post=7681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/tags?post=7681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}