{"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$blogger":"http://schemas.google.com/blogger/2008","xmlns$georss":"http://www.georss.org/georss","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-89878749563391212"},"updated":{"$t":"2026-06-16T02:15:53.446-07:00"},"category":[{"term":"Books for Android development"},{"term":"Android Studio.how to"},{"term":"how to"},{"term":"Android Developer's news"},{"term":"Android code sample: bitmap and image"},{"term":"Windows 10.how to"},{"term":"Android code sample: Google Maps Android API v2"},{"term":"Android Studio"},{"term":"misc"},{"term":"Android Network Programming"},{"term":"Custom View"},{"term":"Android code sample: ui"},{"term":"Android Developer Tools"},{"term":"Android Developer Tips"},{"term":"Android code sample: detect touch"},{"term":"animation"},{"term":"news"},{"term":"Android Apps"},{"term":"Android code sample: thread"},{"term":"step-by-step series"},{"term":"Google Maps Android API v2"},{"term":"Ubuntu"},{"term":"VirtualBox"},{"term":"Google's news"},{"term":"USB Host Mode"},{"term":"Android code sample: Networking"},{"term":"Android code sample: WebView"},{"term":"Android code sample: usb"},{"term":"Eclipse"},{"term":"Path"},{"term":"RecyclerView"},{"term":"Android code sample: ListView"},{"term":"Google Play Services"},{"term":"ACTION_OPEN_DOCUMENT"},{"term":"Canvas"},{"term":"Android Emulator"},{"term":"Android code sample: BlueTooth"},{"term":"Android code sample: ImageView"},{"term":"Google"},{"term":"Google I\/O"},{"term":"video tutorial"},{"term":"Android code sample: AsyncTask"},{"term":"Animated GIF"},{"term":"Books for Game development"},{"term":"Microsoft"},{"term":"Support Library"},{"term":"Xamarin"},{"term":"Android Debug Bridge (adb)"},{"term":"Android code sample: Detecting Gestures"},{"term":"books for Java"},{"term":"Android 5.0"},{"term":"Android Design Support Library"},{"term":"Android code sample: PopupWindow"},{"term":"Android code sample: ViewPager"},{"term":"Books for mobile app development"},{"term":"Material Design"},{"term":"Microsoft's news"},{"term":"Pokémon"},{"term":"development"},{"term":"Android code sample: BlueTooth Low Energy"},{"term":"Android code sample: MediaPlayer"},{"term":"Android code sample: SQLite database"},{"term":"Android code sample: general info"},{"term":"Android code sample: storage"},{"term":"Books (others)"},{"term":"CardView"},{"term":"Development Tools"},{"term":"Face Detection"},{"term":"HC-05\/HC-06 Bluetooth Module"},{"term":"Java Concurrent"},{"term":"KitKat"},{"term":"Visual Studio 2015"},{"term":"android.support.v7.widget.Toolbar"},{"term":"ex.Android.Kotlin"},{"term":"ActionBarCompat"},{"term":"Android code sample: String"},{"term":"Android code sample: YouTube Android Player API"},{"term":"Arduino"},{"term":"Bluetooth Low Energy"},{"term":"Chrome App"},{"term":"Dynamic View"},{"term":"EditText"},{"term":"Java 8"},{"term":"JavaScript"},{"term":"Linux"},{"term":"Network Programming"},{"term":"Android 6"},{"term":"Android NDK"},{"term":"Android Things"},{"term":"Android Wearables"},{"term":"Android code sample: ProgressBar"},{"term":"Books for Android users"},{"term":"Books for Windows development"},{"term":"Button"},{"term":"Here API example"},{"term":"JDK"},{"term":"Java"},{"term":"Java\/JavaFX"},{"term":"Kotlin Language"},{"term":"Marshmallow"},{"term":"Qt"},{"term":"Snackbar"},{"term":"System info"},{"term":"VideoView"},{"term":"Visual Studio"},{"term":"Windows 10"},{"term":"graphics"},{"term":"info"},{"term":"learn Kotlin"},{"term":"ACTION_GET_CONTENT"},{"term":"Android 4.4"},{"term":"Android code sample: NFC"},{"term":"Android code sample: SwipeRefreshLayout"},{"term":"Books for FREE"},{"term":"Books for web development"},{"term":"Cardboard"},{"term":"ExifInterface"},{"term":"FloatingActionButton"},{"term":"GridView"},{"term":"IoT"},{"term":"Linux Mint"},{"term":"Raspberry Pi"},{"term":"TextView"},{"term":"UI and design"},{"term":"YouTube Android Player API"},{"term":"cross-platform development"},{"term":"synchronized"},{"term":"Android Wear"},{"term":"Android code sample: ActionBarCompat"},{"term":"Android code sample: Animation"},{"term":"Android code sample: AnimationDrawable"},{"term":"Android code sample: Layout"},{"term":"Android code sample: ListFragment"},{"term":"Android code sample: Spinner"},{"term":"Android code sample: SurfaceView"},{"term":"Android code sample: ViewFlipper"},{"term":"Android code sample: WiFi"},{"term":"Bluetooth LE Gatt Example"},{"term":"BroadcastReceiver"},{"term":"Chrome Remote Desktop"},{"term":"ColorMatrix"},{"term":"Drag and Drop"},{"term":"Google Charts"},{"term":"Google Play services SDK"},{"term":"Intel"},{"term":"Intent.ACTION_PICK"},{"term":"MP3 Player"},{"term":"MediaMetadataRetriever"},{"term":"MultiWindowMode"},{"term":"OpenCV"},{"term":"Permission"},{"term":"Unity"},{"term":"Wallpaper"},{"term":"Web Server"},{"term":"Xiaomi"},{"term":"elevation"},{"term":"emulator"},{"term":"3D Hologram Video Projector"},{"term":"Android N"},{"term":"Android O"},{"term":"Android code sample: CountDownTimer"},{"term":"Android code sample: DrawerLayout"},{"term":"Android code sample: ExpandableListView"},{"term":"Android code sample: Fragment"},{"term":"Android code sample: Locale"},{"term":"Android code sample: MapFragment"},{"term":"Android code sample: Timer and TimerTask"},{"term":"Android code sample: ToneGenerator"},{"term":"Android code sample: battery"},{"term":"Android\/Java programming basic"},{"term":"App Inventor"},{"term":"BottomSheet"},{"term":"ColorFilter"},{"term":"DialogFragment"},{"term":"HM-10 BLE Module"},{"term":"HTC"},{"term":"Huawei"},{"term":"ImageDecoder"},{"term":"Java example"},{"term":"JavaFX for Android"},{"term":"LocationServices"},{"term":"MK 809III"},{"term":"MediaController"},{"term":"Memory"},{"term":"NFC"},{"term":"Networking"},{"term":"ObjectAnimator"},{"term":"PDF"},{"term":"PdfRenderer"},{"term":"PhoneGap"},{"term":"RFID"},{"term":"RFID Tag"},{"term":"RingtoneManager"},{"term":"RippleDrawable"},{"term":"Ubuntu Desktop"},{"term":"YouTube API"},{"term":"androidify"},{"term":"books for Kotlin"},{"term":"dev Microsoft"},{"term":"introduction"},{"term":"setup"},{"term":"AVD (Android Virtual Device)"},{"term":"AlarmManager"},{"term":"AlertDialog.Builder"},{"term":"Android 5.1 Lollipop"},{"term":"Android ADK"},{"term":"Android Code sample: Toast"},{"term":"Android Jetpack"},{"term":"Android Wear SDK"},{"term":"Android code sample: Date Time"},{"term":"Android code sample: LocationSource and LocationListener"},{"term":"Android code sample: Menu"},{"term":"Android code sample: PackageManager"},{"term":"Android code sample: PagerAdapter"},{"term":"Android code sample: PopupMenu"},{"term":"Android code sample: ProcessBuilder"},{"term":"Android code sample: Service and IntentService"},{"term":"Android code sample: SupportMapFragment"},{"term":"Android code sample: VelocityTracker"},{"term":"Android code sample: ViewAnimator"},{"term":"Bitmap"},{"term":"Bluestacks"},{"term":"Books for C\/Cpp development"},{"term":"Books for Cross-platform"},{"term":"Books for Glass development"},{"term":"Books for Linux"},{"term":"Chromebook"},{"term":"Cloud"},{"term":"ConstraintLayout"},{"term":"DIY"},{"term":"Dart"},{"term":"Easter Egg"},{"term":"Emoji"},{"term":"Game development"},{"term":"GeoNames"},{"term":"Git"},{"term":"Google Cast SDK"},{"term":"Google Maps JavaScript API v3"},{"term":"GridLayout"},{"term":"HTML5"},{"term":"HttpService"},{"term":"IP address"},{"term":"Intel x86 Emulator Accelerator (HAXM)"},{"term":"JSON"},{"term":"JobScheduler"},{"term":"JobService"},{"term":"Lubuntu"},{"term":"MSDN"},{"term":"Mobile Ads SDK"},{"term":"Mobile Vision API"},{"term":"Nokia"},{"term":"OpenWeatherMap"},{"term":"Options Menu"},{"term":"Parse JSON"},{"term":"Processing Language"},{"term":"Project Brillo"},{"term":"Remix OS"},{"term":"RxJava"},{"term":"Samsung"},{"term":"ScriptIntrinsicConvolve3x3"},{"term":"Spinner"},{"term":"Standalone ESP8266"},{"term":"Stream Video"},{"term":"TextWatcher"},{"term":"Ubuntu Make"},{"term":"VectorDrawable"},{"term":"Virtual Reality"},{"term":"Visualizer"},{"term":"Weave"},{"term":"Web Tools"},{"term":"XML"},{"term":"books"},{"term":"books for Google"},{"term":"books for Microsoft Windows 10"},{"term":"books for Python"},{"term":"color"},{"term":"currency"},{"term":"drawable"},{"term":"ex.android.widget"},{"term":"multi-device"},{"term":"org.apache.http"},{"term":"products"},{"term":"reCAPTCHA Android API"},{"term":"style"},{"term":"testing"},{"term":"tutorial"},{"term":"user location"},{"term":"x86"},{"term":"3D smartphone"},{"term":"ACTION_OPEN_DOCUMENT_TREE"},{"term":"AMD"},{"term":"ARM"},{"term":"ART"},{"term":"AT-09 BLE Module"},{"term":"ActionBar"},{"term":"AdMob SDK"},{"term":"AlertDialog"},{"term":"Alphabet"},{"term":"Android (Go Edition)"},{"term":"Android 5.1.1"},{"term":"Android Device Manager"},{"term":"Android M"},{"term":"Android One"},{"term":"Android Open Accessory"},{"term":"Android Q"},{"term":"Android code sample: Activity"},{"term":"Android code sample: AudioRecord"},{"term":"Android code sample: AudioTrack"},{"term":"Android code sample: Currency"},{"term":"Android code sample: Date Binding"},{"term":"Android code sample: DownloadManager"},{"term":"Android code sample: ImageSwitcher"},{"term":"Android code sample: PreferenceFragment"},{"term":"Android code sample: ProgressDialog"},{"term":"Android code sample: Runnable"},{"term":"Android code sample: Socket"},{"term":"Android code sample: SoundPool"},{"term":"Android code sample: TextSwitcher"},{"term":"Android code sample: ViewSwitcher"},{"term":"Android mini PC"},{"term":"AndroidX"},{"term":"AnimatedVectorDrawable"},{"term":"Animator"},{"term":"Apache Cordova"},{"term":"App Inventor 2"},{"term":"Arduino\/Genuino 101"},{"term":"Ark Compiler"},{"term":"AutoCompleteTextView"},{"term":"Azure"},{"term":"BeagleBone Black"},{"term":"Books for Embedded"},{"term":"CalendarView"},{"term":"CalledFromWrongThreadException"},{"term":"Chrome Apps development"},{"term":"Chrome Dev Editor"},{"term":"Chrome DevTools"},{"term":"Cinnamon"},{"term":"ContentLoadingProgressBar"},{"term":"CoordinatorLayout"},{"term":"East"},{"term":"ExoPlayer"},{"term":"Firefox OS"},{"term":"Flutter"},{"term":"Fly Nixie"},{"term":"FragmentActivity"},{"term":"GIMP"},{"term":"Geocoder"},{"term":"Glass"},{"term":"Google Cast SDK for Android"},{"term":"Google Chromecast"},{"term":"Google Developers"},{"term":"Google Earth Pro"},{"term":"Google Maps Mobile APIs"},{"term":"Google Maps Places API"},{"term":"Google Mobile Ads SDK for Android"},{"term":"Google Search"},{"term":"HTTP\/2"},{"term":"HandlerThread"},{"term":"Hardware Acceleration"},{"term":"HarmonyOS"},{"term":"Hyperlapse"},{"term":"IOIO"},{"term":"IPV6"},{"term":"IllegalArgumentException"},{"term":"IntelliJ IDEA"},{"term":"Intent"},{"term":"International Space Station (ISS)"},{"term":"Internet"},{"term":"JAVA_HOME"},{"term":"Kivy"},{"term":"L Developer Preview"},{"term":"LatLng"},{"term":"Lifecycle"},{"term":"Lint Error Checking"},{"term":"Location"},{"term":"Lock"},{"term":"MP4"},{"term":"MPAndroidChart"},{"term":"Machine Learning"},{"term":"Material Theme"},{"term":"Matrix"},{"term":"Maven"},{"term":"Media Effects API"},{"term":"MediaCodecList"},{"term":"MediaStore"},{"term":"Microsoft Hyperlapse"},{"term":"Mobile Web App"},{"term":"Motorola"},{"term":"Navigation Component"},{"term":"Navigation Drawer"},{"term":"NoClassDefFoundError"},{"term":"Node.js"},{"term":"Nokia X software platform"},{"term":"Nvidia"},{"term":"Online document"},{"term":"OpenGL ES"},{"term":"OutOfMemoryError"},{"term":"Palette"},{"term":"Panoramio"},{"term":"Parrot"},{"term":"PdfDocument"},{"term":"Percent Support Library"},{"term":"Polymer"},{"term":"Project SkyBridge"},{"term":"Qt Mobile"},{"term":"RandomStringUtils"},{"term":"RenderScript"},{"term":"SE for Android"},{"term":"SVG"},{"term":"Samsung Developers"},{"term":"ScriptIntrinsicBlur"},{"term":"Sky"},{"term":"SoftKeyboard"},{"term":"Systrace"},{"term":"Takee"},{"term":"UDOO"},{"term":"Unreal"},{"term":"VMware"},{"term":"Version Control"},{"term":"Visual C++"},{"term":"Visual Studio 2013"},{"term":"Visual Studio Emulator for Android"},{"term":"Voice Changer"},{"term":"Voice Search"},{"term":"WebView"},{"term":"WinRT"},{"term":"Windows Bridge for Android"},{"term":"accessory"},{"term":"andproud"},{"term":"android code sample: memory"},{"term":"android-gif-encoder"},{"term":"android.os.StatFs"},{"term":"appcompat_v7"},{"term":"books for Chrome Apps"},{"term":"books for Network Programming"},{"term":"books for Networking"},{"term":"books for Qt"},{"term":"browser"},{"term":"divider"},{"term":"drone"},{"term":"ex.Android.Java"},{"term":"ex.android.layout"},{"term":"filesystem"},{"term":"font"},{"term":"gphone"},{"term":"javafxports"},{"term":"lubuntu-desktop"},{"term":"maker"},{"term":"random number"},{"term":"space"}],"title":{"type":"text","$t":"Android-er"},"subtitle":{"type":"html","$t":"\u003Ci\u003EPlease visit my new address:\u003C\/i\u003E \u003Cb\u003E\u003Ca href=\"https:\/\/coxxect.blogspot.com\/\"\u003Ehttps:\/\/coxxect.blogspot.com\/\u003C\/a\u003E\u003C\/b\u003E"},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default?alt=json"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"},{"rel":"next","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default?alt=json\u0026start-index=26\u0026max-results=25"}],"author":[{"name":{"$t":"Unknown"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"2364"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"25"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-8405168701699534962"},"published":{"$t":"2022-05-22T13:51:00.002-07:00"},"updated":{"$t":"2022-05-22T13:51:30.716-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"}],"title":{"type":"text","$t":"Simplest Snackbar "},"content":{"type":"html","$t":"\u003Cp\u003E\n  \u003Ci\u003E\u003Cb\u003E\u003Ca href=\"https:\/\/developer.android.com\/reference\/com\/google\/android\/material\/snackbar\/Snackbar\" target=\"_blank\"\u003ESnackbars\u003C\/a\u003E\u003C\/b\u003E\n    provide lightweight feedback about an operation. They show a brief message\n    at the bottom of the screen on mobile and lower left on larger devices.\n    Snackbars appear above all other elements on screen and only one can be\n    displayed at a time.\u003Cbr \/\u003E\u003Cbr \/\u003EThey automatically disappear after a timeout\n    or after user interaction elsewhere on the screen, particularly after\n    interactions that summon a new surface or activity. Snackbars can be swiped\n    off screen.\u003C\/i\u003E\u003Cbr \/\u003E\u003Cbr \/\u003EIt's a simplest example to show\u0026nbsp;Snackbar using Kotlin. The\n  layout xml is same as last post \"\u003Ca href=\"https:\/\/android-er.blogspot.com\/2022\/05\/simple-example-of-button-and-toast.html\"\u003ESimple example of Button and Toast\u003C\/a\u003E\".\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n  \u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiL9MqdGow7TKQeJAda2AlO5eyRFQOCceIoy_-CQ57xo5pfk8it1AevTTVPQDWcMdp_Z7KfBFPUm1Y-C06301lnYUb5WdNe8_yI-ZqU_8BjGFgSeb3zq_vrx4LTmTAXd_MJwe8Iis1f5pFCz19LxU0QWXW-0IPP5tKTF34AWsQzXa9yxrYcKCKTTmtR\/s1366\/Snackbar.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"180\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiL9MqdGow7TKQeJAda2AlO5eyRFQOCceIoy_-CQ57xo5pfk8it1AevTTVPQDWcMdp_Z7KfBFPUm1Y-C06301lnYUb5WdNe8_yI-ZqU_8BjGFgSeb3zq_vrx4LTmTAXd_MJwe8Iis1f5pFCz19LxU0QWXW-0IPP5tKTF34AWsQzXa9yxrYcKCKTTmtR\/s320\/Snackbar.png\" width=\"320\" \/\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\u003Cbr \/\u003E\nMainActivity.kt\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage android_er.blogspot.com.myapp01\n\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.Button\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.google.android.material.snackbar.Snackbar\n\nprivate lateinit var btnA: Button\nprivate lateinit var btnB: Button\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        btnA = findViewById(R.id.btn_A)\n        btnB = findViewById(R.id.btn_B)\n\n        btnA.setOnClickListener(\n            { view: View -\u0026gt;\n                Toast.makeText(\n                    this,\n                    \"Button A pressed\",\n                    Toast.LENGTH_LONG,\n                ).show()\n            },\n        )\n\n        btnB.setOnClickListener(\n            { view: View -\u0026gt;\n                \u003C\/span\u003E\u003Cspan style=\"color: red;\"\u003Eval snackbar = Snackbar\n                    .make(btnB,\n                        \"android-er.blogspot.com\",\n                        Snackbar.LENGTH_LONG)\n                snackbar.show()\u003C\/span\u003E\u003Cspan style=\"color: black;\"\u003E\n            },\n        )\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/8405168701699534962\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/8405168701699534962","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8405168701699534962"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8405168701699534962"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2022\/05\/simplest-snackbar.html","title":"Simplest Snackbar "}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiL9MqdGow7TKQeJAda2AlO5eyRFQOCceIoy_-CQ57xo5pfk8it1AevTTVPQDWcMdp_Z7KfBFPUm1Y-C06301lnYUb5WdNe8_yI-ZqU_8BjGFgSeb3zq_vrx4LTmTAXd_MJwe8Iis1f5pFCz19LxU0QWXW-0IPP5tKTF34AWsQzXa9yxrYcKCKTTmtR\/s72-c\/Snackbar.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-957613782748245987"},"published":{"$t":"2022-05-22T12:37:00.003-07:00"},"updated":{"$t":"2022-05-22T12:37:51.627-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"}],"title":{"type":"text","$t":"Simple example of Button and Toast (Android Kotlin)"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjBxTDoPPVEuaSulh4P99fe-axnuVpCSjbyTZGAIlQ6EhR8zxNHFXC05wZoX_zqEVTuyxUJXnXwdFNwhOojRmUGwO7AEaDOQIq3SwHi-fsd6Lx5M5xw8kooPaFtSd1StNNxS_J9rT6PujTu4OCnVM5vYr48q6yNL-pqWgKOE4ecyAEncYkTIhuYBALM\/s1366\/button%20and%20Toast.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"180\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjBxTDoPPVEuaSulh4P99fe-axnuVpCSjbyTZGAIlQ6EhR8zxNHFXC05wZoX_zqEVTuyxUJXnXwdFNwhOojRmUGwO7AEaDOQIq3SwHi-fsd6Lx5M5xw8kooPaFtSd1StNNxS_J9rT6PujTu4OCnVM5vYr48q6yNL-pqWgKOE4ecyAEncYkTIhuYBALM\/s320\/button%20and%20Toast.png\" width=\"320\" \/\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\u003Cbr \/\u003E\nactivity_main.xml\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;androidx.constraintlayout.widget.ConstraintLayout \n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u003C\/span\u003E\u003Cspan style=\"color: red;\"\u003E\u0026lt;LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        android:layout_margin=\"10dp\"\u0026gt;\n\n        \u0026lt;Button\n            android:id=\"@+id\/btn_A\"\n            android:layout_width=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Button A\"\n            android:layout_margin=\"5dp\"\/\u0026gt;\n        \u0026lt;Button\n            android:id=\"@+id\/btn_B\"\n            android:layout_width=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Button B\"\n            android:layout_margin=\"5dp\"\/\u0026gt;\n    \u0026lt;\/LinearLayout\u0026gt;\u003C\/span\u003E\u003Cspan style=\"color: black;\"\u003E\n\n\u0026lt;\/androidx.constraintlayout.widget.ConstraintLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\nMainActivity.kt\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage android_er.blogspot.com.myapp01\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.Button\nimport android.widget.Toast\n\n\u003C\/span\u003E\u003Cspan style=\"color: red;\"\u003Eprivate lateinit var btnA: Button\nprivate lateinit var btnB: Button\u003C\/span\u003E\u003Cspan style=\"color: black;\"\u003E\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        \u003C\/span\u003E\u003Cspan style=\"color: red;\"\u003EbtnA = findViewById(R.id.btn_A)\n        btnB = findViewById(R.id.btn_B)\n\n        btnA.setOnClickListener(\n            { view: View -\u0026gt;\n                Toast.makeText(\n                    this,\n                    \"Button A pressed\",\n                    Toast.LENGTH_LONG,\n                ).show()\n            },\n        )\n\n        btnB.setOnClickListener(\n            { view: View -\u0026gt;\n                Toast.makeText(\n                    this,\n                    \"Button B pressed\",\n                    Toast.LENGTH_LONG,\n                ).show()\n            },\n        )\u003C\/span\u003E\u003Cspan style=\"color: black;\"\u003E\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/957613782748245987\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/957613782748245987","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/957613782748245987"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/957613782748245987"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2022\/05\/simple-example-of-button-and-toast.html","title":"Simple example of Button and Toast (Android Kotlin)"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjBxTDoPPVEuaSulh4P99fe-axnuVpCSjbyTZGAIlQ6EhR8zxNHFXC05wZoX_zqEVTuyxUJXnXwdFNwhOojRmUGwO7AEaDOQIq3SwHi-fsd6Lx5M5xw8kooPaFtSd1StNNxS_J9rT6PujTu4OCnVM5vYr48q6yNL-pqWgKOE4ecyAEncYkTIhuYBALM\/s72-c\/button%20and%20Toast.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-1163052888697299773"},"published":{"$t":"2021-06-14T08:56:00.006-07:00"},"updated":{"$t":"2021-06-14T09:05:05.102-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.android.layout"}],"title":{"type":"text","$t":"TextInputLayout + TextInputEditText"},"content":{"type":"html","$t":"\u003Cp\u003E\n  Simple example to\n  use\u0026nbsp;com.google.android.material.textfield.TextInputLayout\n  and\u0026nbsp;com.google.android.material.textfield.TextInputEditText in layout xml\n  to make edit text better.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgYGjpJ5ogCr2TxmULi271qbwdna6xlbgaUHDAE1R4GyA6jftKBtTaOMwDtK0EWbS6crSkJxjqedHCqyhow5zIjdswn_t8MXhWr-FtScPZug_xzkjI0idQZ5NuqM0R4nOsbf1Pq2jBF1_Q\/s1300\/ExEditText.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1300\" data-original-width=\"750\" height=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgYGjpJ5ogCr2TxmULi271qbwdna6xlbgaUHDAE1R4GyA6jftKBtTaOMwDtK0EWbS6crSkJxjqedHCqyhow5zIjdswn_t8MXhWr-FtScPZug_xzkjI0idQZ5NuqM0R4nOsbf1Pq2jBF1_Q\/w231-h400\/ExEditText.png\" width=\"231\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;LinearLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"android-er.blogspot.com\"\n        android:gravity=\"center\"\/\u0026gt;\n    \u0026lt;TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Normal TextView\"\/\u0026gt;\n    \u0026lt;EditText\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"hint\"\/\u0026gt;\n    \u0026lt;TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"TextInputLayout + TextInputEditText\"\/\u0026gt;\n    \u003C\/span\u003E\u003Cspan style=\"color: red;\"\u003E\u003Cb\u003E\u0026lt;com.google.android.material.textfield.TextInputLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Hint\"\u0026gt;\n        \u0026lt;com.google.android.material.textfield.TextInputEditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:textStyle=\"bold\"\/\u0026gt;\n    \u0026lt;\/com.google.android.material.textfield.TextInputLayout\u0026gt;\u003C\/b\u003E\u003C\/span\u003E\u003Cspan style=\"color: black;\"\u003E\n\u0026lt;\/LinearLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/1163052888697299773\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/1163052888697299773","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/1163052888697299773"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/1163052888697299773"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2021\/06\/textinputlayout-textinputedittext.html","title":"TextInputLayout + TextInputEditText"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgYGjpJ5ogCr2TxmULi271qbwdna6xlbgaUHDAE1R4GyA6jftKBtTaOMwDtK0EWbS6crSkJxjqedHCqyhow5zIjdswn_t8MXhWr-FtScPZug_xzkjI0idQZ5NuqM0R4nOsbf1Pq2jBF1_Q\/s72-w231-h400-c\/ExEditText.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-4360444408150093171"},"published":{"$t":"2021-05-20T11:06:00.004-07:00"},"updated":{"$t":"2021-05-20T11:15:13.535-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Studio.how to"}],"title":{"type":"text","$t":"Fix Android Studio error: Missing essential plugin: org.jetbrains.android"},"content":{"type":"html","$t":"Just update Android Studio 4.2.1, but fail to run with error of:\u0026nbsp;\n\u003Cdiv\u003E\n  \u003Cbr \/\u003E\n  \u003Cdiv\u003E\n    \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003EMissing essential plugin:\u0026nbsp;\u003C\/span\u003E\u003C\/b\u003E\n  \u003C\/div\u003E\n  \u003Cdiv\u003E\n    \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003Eorg.jetbrains.android\u0026nbsp;\u003C\/span\u003E\u003C\/b\u003E\n  \u003C\/div\u003E\n  \u003Cdiv\u003E\n    \u003Cspan style=\"color: red;\"\u003E\u003Cb\u003EPlease reinstall Android Studio from scratch.\u003C\/b\u003E\u0026nbsp;\u003C\/span\u003E\n  \u003C\/div\u003E\n  \u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n  \u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n    \u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEguMYyZLHt6t0h-k_LdE74js7LK1lBho657cO7yG1fVZDW6P2VUVWD5wNu2BdMst8e2r9xrtuy8uZHezDY6a0K-IIAXc0gX0BdhiGNFKKmaBhS2G_flI7ChTGWfYm_bejnO37-0qHoiq28\/s653\/Missing+essential+plugin.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"411\" data-original-width=\"653\" height=\"403\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEguMYyZLHt6t0h-k_LdE74js7LK1lBho657cO7yG1fVZDW6P2VUVWD5wNu2BdMst8e2r9xrtuy8uZHezDY6a0K-IIAXc0gX0BdhiGNFKKmaBhS2G_flI7ChTGWfYm_bejnO37-0qHoiq28\/w640-h403\/Missing+essential+plugin.png\" width=\"640\" \/\u003E\u003C\/a\u003E\n  \u003C\/div\u003E\n  \u003Cbr \/\u003E\n  \u003Cdiv\u003EHere how I fix it in my case, Android Studio 4.2.1 on Windows 10:\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/bJ8OXyoAUJA\" title=\"YouTube video player\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cdiv\u003E\n  \u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003E\n    Search and delete\n    \"C:\\Users\\user\\AppData\\Roaming\\Google\\AndroidStudio4.X\\disabled_plugins.txt\"\n  \u003C\/div\u003E\n  \u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n  \u003Cdiv\u003EThere are two in my setup:\u003C\/div\u003E\n  \u003Cdiv\u003E\n    \"C:\\Users\\user\\AppData\\Roaming\\Google\\AndroidStudio4.1\\disabled_plugins.txt\"\n  \u003C\/div\u003E\n  \u003Cdiv\u003E\n    \"C:\\Users\\user\\AppData\\Roaming\\Google\\AndroidStudio4.2\\disabled_plugins.txt\"\n  \u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003EI delete both\u0026nbsp;disabled_plugins.txt and re-start Android Studio.\u003C\/div\u003E\n\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/4360444408150093171\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/4360444408150093171","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/4360444408150093171"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/4360444408150093171"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2021\/05\/fix-android-studio-error-missing.html","title":"Fix Android Studio error: Missing essential plugin: org.jetbrains.android"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEguMYyZLHt6t0h-k_LdE74js7LK1lBho657cO7yG1fVZDW6P2VUVWD5wNu2BdMst8e2r9xrtuy8uZHezDY6a0K-IIAXc0gX0BdhiGNFKKmaBhS2G_flI7ChTGWfYm_bejnO37-0qHoiq28\/s72-w640-h403-c\/Missing+essential+plugin.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-7590027444572217533"},"published":{"$t":"2021-01-04T12:09:00.003-08:00"},"updated":{"$t":"2021-01-04T14:01:40.160-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Java"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"}],"title":{"type":"text","$t":"Android read text file with request permission at runtime"},"content":{"type":"html","$t":"\u003Cp\u003EAndroid example to read text file, with request permission at runtime.\u003C\/p\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/DRsnrKtUuQc\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cp\u003ETo read file in Android, if your app is installed on device that runs Android 6.0 (API level 23) or higher, you must request the dangerous permissions at runtime. (ref: \u003Ca href=\"https:\/\/developer.android.com\/training\/permissions\/requesting\" target=\"_blank\"\u003EAndroid Developers :\u0026nbsp;Request app permissions\u003C\/a\u003E)\u003C\/p\u003E\u003Cp\u003EAlso shown in the video, access to \/proc\/net filesystem is\u0026nbsp;restricted on Android 10+\u003C\/p\u003E\u003Cp\u003EOn devices that run Android 10 or higher, apps cannot access \/proc\/net, which includes information about a device's network state. Apps that need access to this information, such as VPNs, should use the NetworkStatsManager or ConnectivityManager class. (ref: \u003Ca href=\"https:\/\/developer.android.com\/about\/versions\/10\/privacy\/changes#proc-net-filesystem\" target=\"_blank\"\u003EAndroid Developers: Privacy changes in Android 10 \u0026gt; Restriction on access to \/proc\/net filesystem\u003C\/a\u003E)\u003C\/p\u003E\nlayout xml\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;LinearLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"horizontal\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/leftpanel\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        android:background=\"@color\/black\"\n        android:layout_margin=\"5dp\"\n        android:padding=\"5dp\"\u0026gt;\n        \u0026lt;TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"20dp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"@color\/white\"\n            android:text=\"android-er.blogspot.com\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/exercise\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"20dp\"\n            android:textColor=\"@color\/white\"\n            android:text=\"Exercise: Read Text File\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/sysinfo\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"20dp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"@color\/white\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/sdkinfo\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textSize=\"20dp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"@color\/white\"\/\u0026gt;\n\n    \u0026lt;\/LinearLayout\u0026gt;\n\n    \u0026lt;RelativeLayout\n        android:id=\"@+id\/rightpanel\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        android:background=\"#C0C0C0\"\n        android:layout_margin=\"5dp\"\n        android:padding=\"5dp\"\u0026gt;\n        \u0026lt;Button\n            android:id=\"@+id\/read\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"2dp\"\n            android:text=\"Read\"\n            android:layout_alignParentTop=\"true\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/filecontent\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_margin=\"2dp\"\n            android:background=\"#808080\"\n            android:fontFamily=\"monospace\"\n            android:layout_below=\"@id\/read\"\n            android:layout_above=\"@id\/msg\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/msg\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"2dp\"\n            android:background=\"#404040\"\n            android:layout_gravity=\"bottom\"\n            android:layout_alignParentBottom=\"true\"\/\u0026gt;\n    \u0026lt;\/RelativeLayout\u0026gt;\n\u0026lt;\/LinearLayout\u0026gt;\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\nJava code:\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage android_er.blogspot.com.jexreadtextfile;\n\nimport android.Manifest;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.text.method.ScrollingMovementMethod;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\n\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.FileReader;\nimport java.io.IOException;\n\npublic class MainActivity extends AppCompatActivity {\n\n    \/\/Try different files\n    \/\/String targetFile = \"\/sdcard\/Download\/Test.txt\";\n    \/\/String targetFile = \"\/proc\/cpuinfo\";\n    \/\/String targetFile = \"\/proc\/meminfo\";\n    String targetFile = \"\/proc\/net\/arp\";  \/\/Restricted since Android 10\n\n    Button btnRead;\n    TextView tvFileContent;\n    TextView tvMsg;\n\n    final int PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        dispExInfo();\n\n        btnRead = findViewById(R.id.read);\n        btnRead.setText(targetFile);\n        tvFileContent = findViewById(R.id.filecontent);\n        \/\/make this TextView scrollable\n        tvFileContent.setMovementMethod(new ScrollingMovementMethod());\n        tvMsg = findViewById(R.id.msg);\n        tvMsg.setText(\"Click on READ button\");\n\n        btnRead.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                tvMsg.setText(\"READ button clicked\");\n                toReadFile();\n            }\n        });\n    }\n\n\n    \/*\n    Request Permission at Runtime, before read file.\n     *\/\n    void toReadFile(){\n        if (ContextCompat.checkSelfPermission(this,\n                    Manifest.permission.READ_EXTERNAL_STORAGE)\n                    != PackageManager.PERMISSION_GRANTED) {\n                \/\/ Permission is not granted\n                \/\/ Should we show an explanation?\n                if (ActivityCompat.shouldShowRequestPermissionRationale(\n                        this,\n                        Manifest.permission.READ_EXTERNAL_STORAGE)) {\n                    \/\/ Show an explanation to the user *asynchronously* -- don't block\n                    \/\/ this thread waiting for the user's response! After the user\n                    \/\/ sees the explanation, try again to request the permission.\n\n                    \/\/to simplify, call requestPermissions again\n                    Toast.makeText(getApplicationContext(),\n                            \"shouldShowRequestPermissionRationale\",\n                            Toast.LENGTH_LONG).show();\n                    ActivityCompat.requestPermissions(this,\n                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},\n                            PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);\n                } else {\n                    \/\/ No explanation needed; request the permission\n                    ActivityCompat.requestPermissions(this,\n                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},\n                            PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);\n    }\n            }else{\n                \/\/ permission granted\n                readFile(targetFile);\n            }\n    }\n\n    @Override\n    public void onRequestPermissionsResult(\n            int requestCode,\n            @NonNull String[] permissions,\n            @NonNull int[] grantResults) {\n        if(requestCode == PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE){\n            if (grantResults.length \u0026gt; 0\n                    \u0026amp;\u0026amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n                \/\/ permission was granted.\n                Toast.makeText(getApplicationContext(),\n                        \"permission was granted, thx:)\",\n                        Toast.LENGTH_LONG).show();\n\n                readFile(targetFile);\n            } else {\n                \/\/ permission denied.\n                Toast.makeText(getApplicationContext(),\n                        \"permission denied! Oh:(\",\n                        Toast.LENGTH_LONG).show();\n            }\n            return;\n\n        }else{\n            super.onRequestPermissionsResult(requestCode, permissions, grantResults);\n        }\n    }\n\n    void readFile(String f){\n        File file = new File(f);\n        StringBuilder stringBuilder = new StringBuilder();\n\n        try {\n            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));\n            String line;\n            while ((line = bufferedReader.readLine()) != null) {\n                stringBuilder.append(line);\n                stringBuilder.append('\\n');\n            }\n            bufferedReader.close();\n\n            tvFileContent.setText(stringBuilder);\n            tvMsg.setText(\"Done\");\n        } catch (FileNotFoundException e) {\n            e.printStackTrace();\n            tvMsg.setText(e.getMessage());\n        } catch (IOException e) {\n            e.printStackTrace();\n            tvMsg.setText(e.getMessage());\n        }\n    }\n\n    \/* ==========================================\n    display Exercise info\n     *\/\n\n    void dispExInfo(){\n        TextView tvExercise = findViewById(R.id.exercise);\n        TextView tvSysInfo = findViewById(R.id.sysinfo);\n        TextView tvSdkInfo = findViewById(R.id.sdkinfo);\n\n        tvExercise.append(\" (Java)\");\n\n        String manufacturer = Build.MANUFACTURER;\n        String model = Build.MODEL;\n        String release = Build.VERSION.RELEASE;\n\n        tvSysInfo.setText(\n                manufacturer + \"\\n\"\n                        + model + \"\\n\"\n                        + \"Android: \" + release + \"\\n\");\n\n        PackageManager packageManager = getPackageManager();\n        String packageName = getPackageName();\n        int targetSdkVersion, minSdkVersion;\n        int versionCode;\n        String versionName;\n\n        try {\n            PackageInfo packageInfo =\n                    packageManager.getPackageInfo(packageName, 0);\n\n            ApplicationInfo applicationInfo = packageInfo.applicationInfo;\n            targetSdkVersion = applicationInfo.targetSdkVersion;\n            minSdkVersion = applicationInfo.minSdkVersion;\n\n            tvSdkInfo.setText(\"targetSdkVersion = \" + targetSdkVersion + \"\\n\"\n                    + \"minSdkVersion = \" + minSdkVersion);\n        } catch (PackageManager.NameNotFoundException e) {\n            e.printStackTrace();\n            Toast.makeText(getApplicationContext(),\n                    \"NameNotFoundException: \" + e.getMessage(),\n                    Toast.LENGTH_LONG).show();\n        }\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\nuses-permission of \"android.permission.READ_EXTERNAL_STORAGE\" is needed in AndroidManifest.xml\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    package=\"android_er.blogspot.com.jexreadtextfile\"\u0026gt;\n    \u0026lt;application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap\/ic_launcher\"\n        android:label=\"@string\/app_name\"\n        android:roundIcon=\"@mipmap\/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style\/Theme.JExReadTextFile\"\u0026gt;\n        \u0026lt;activity android:name=\".MainActivity\"\u0026gt;\n            \u0026lt;intent-filter\u0026gt;\n                \u0026lt;action android:name=\"android.intent.action.MAIN\" \/\u0026gt;\n\n                \u0026lt;category android:name=\"android.intent.category.LAUNCHER\" \/\u0026gt;\n            \u0026lt;\/intent-filter\u0026gt;\n        \u0026lt;\/activity\u0026gt;\n    \u0026lt;\/application\u0026gt;\n    \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003E\u0026lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"\/\u0026gt;\u003C\/span\u003E\u003C\/b\u003E\n\u0026lt;\/manifest\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Chr \/\u003E\nKotlin version, basically auto-converted by Android Studio.\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage android_er.blogspot.com.kexreadtextfile\n\nimport android.Manifest\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport android.os.Bundle\nimport android.text.method.ScrollingMovementMethod\nimport android.view.View\nimport android.widget.Button\nimport android.widget.TextView\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.core.app.ActivityCompat\nimport androidx.core.content.ContextCompat\nimport java.io.*\n\n\nclass MainActivity : AppCompatActivity() {\n    \/\/Try different files\n    \/\/var targetFile = \"\/sdcard\/Download\/Test.txt\";\n    var targetFile = \"\/proc\/cpuinfo\";\n    \/\/var targetFile = \"\/proc\/meminfo\";\n    \/\/var targetFile = \"\/proc\/net\/arp\" \/\/Restricted since Android 10\n    var btnRead: Button? = null\n    var tvFileContent: TextView? = null\n    var tvMsg: TextView? = null\n    val PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n        dispExInfo()\n        btnRead = findViewById(R.id.read)\n        btnRead!!.setText(targetFile)\n        tvFileContent = findViewById(R.id.filecontent)\n        \/\/make this TextView scrollable\n        tvFileContent!!.setMovementMethod(ScrollingMovementMethod())\n        tvMsg = findViewById(R.id.msg)\n        tvMsg!!.setText(\"Click on READ button\")\n        btnRead!!.setOnClickListener(View.OnClickListener {\n            tvMsg!!.setText(\"READ button clicked\")\n            toReadFile()\n        })\n    }\n\n    \/*\n    Request Permission at Runtime, before read file.\n     *\/\n    fun toReadFile() {\n        if (ContextCompat.checkSelfPermission(this,\n                        Manifest.permission.READ_EXTERNAL_STORAGE)\n                != PackageManager.PERMISSION_GRANTED) {\n            \/\/ Permission is not granted\n            \/\/ Should we show an explanation?\n            if (ActivityCompat.shouldShowRequestPermissionRationale(\n                            this,\n                            Manifest.permission.READ_EXTERNAL_STORAGE)) {\n                \/\/ Show an explanation to the user *asynchronously* -- don't block\n                \/\/ this thread waiting for the user's response! After the user\n                \/\/ sees the explanation, try again to request the permission.\n\n                \/\/to simplify, call requestPermissions again\n                Toast.makeText(applicationContext,\n                        \"shouldShowRequestPermissionRationale\",\n                        Toast.LENGTH_LONG).show()\n                ActivityCompat.requestPermissions(this,\n                        arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),\n                        PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE)\n            } else {\n                \/\/ No explanation needed; request the permission\n                ActivityCompat.requestPermissions(this,\n                        arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),\n                        PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE)\n            }\n        } else {\n            \/\/ permission granted\n            readFile(targetFile)\n        }\n    }\n\n    override fun onRequestPermissionsResult(\n            requestCode: Int,\n            permissions: Array\u0026lt;String\u0026gt;,\n            grantResults: IntArray) {\n        if (requestCode == PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE) {\n            if (grantResults.size \u0026gt; 0\n                    \u0026amp;\u0026amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n                \/\/ permission was granted.\n                Toast.makeText(applicationContext,\n                        \"permission was granted, thx:)\",\n                        Toast.LENGTH_LONG).show()\n                readFile(targetFile)\n            } else {\n                \/\/ permission denied.\n                Toast.makeText(applicationContext,\n                        \"permission denied! Oh:(\",\n                        Toast.LENGTH_LONG).show()\n            }\n            return\n        } else {\n            super.onRequestPermissionsResult(requestCode, permissions, grantResults)\n        }\n    }\n\n    fun readFile(f: String?) {\n        val file = File(f)\n        val stringBuilder = StringBuilder()\n        try {\n            val bufferedReader = BufferedReader(FileReader(file))\n            var line: String?\n            while (bufferedReader.readLine().also { line = it } != null) {\n                stringBuilder.append(line)\n                stringBuilder.append('\\n')\n            }\n            bufferedReader.close()\n            tvFileContent!!.text = stringBuilder\n            tvMsg!!.text = \"Done\"\n        } catch (e: FileNotFoundException) {\n            e.printStackTrace()\n            tvMsg!!.text = e.message\n        } catch (e: IOException) {\n            e.printStackTrace()\n            tvMsg!!.text = e.message\n        }\n    }\n\n    \/* ==========================================\n    display Exercise info\n     *\/\n    fun dispExInfo() {\n        val tvExercise = findViewById\u0026lt;TextView\u0026gt;(R.id.exercise)\n        val tvSysInfo = findViewById\u0026lt;TextView\u0026gt;(R.id.sysinfo)\n        val tvSdkInfo = findViewById\u0026lt;TextView\u0026gt;(R.id.sdkinfo)\n        tvExercise.append(\" (Kotlin)\")\n        val manufacturer = Build.MANUFACTURER\n        val model = Build.MODEL\n        val release = Build.VERSION.RELEASE\n        tvSysInfo.text = \"\"\"\n             $manufacturer\n             $model\n             Android: $release\n             \n             \"\"\".trimIndent()\n        val packageManager = packageManager\n        val packageName = packageName\n        val targetSdkVersion: Int\n        val minSdkVersion: Int\n        var versionCode: Int\n        var versionName: String\n        try {\n            val packageInfo = packageManager.getPackageInfo(packageName, 0)\n            val applicationInfo = packageInfo.applicationInfo\n            targetSdkVersion = applicationInfo.targetSdkVersion\n            minSdkVersion = applicationInfo.minSdkVersion\n            tvSdkInfo.text = \"\"\"\n                targetSdkVersion = $targetSdkVersion\n                minSdkVersion = $minSdkVersion\n                \"\"\".trimIndent()\n        } catch (e: PackageManager.NameNotFoundException) {\n            e.printStackTrace()\n            Toast.makeText(applicationContext,\n                    \"NameNotFoundException: \" + e.message,\n                    Toast.LENGTH_LONG).show()\n        }\n    }\n}\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcxmXhOrryeEBkL_S42fo3fvMCkMBFj5i0JTOM_56joZzm1ZCjXYE5kk0kG82_bM9uWpLKSv0BBBk_0LHyeMkRiP-IIRjWKOjrrSHENy7R_BTsG1ZKzKpvLZGuRXMepA6KzW2HqRs2F74\/s2000\/kExReadTextFile.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1200\" data-original-width=\"2000\" height=\"384\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcxmXhOrryeEBkL_S42fo3fvMCkMBFj5i0JTOM_56joZzm1ZCjXYE5kk0kG82_bM9uWpLKSv0BBBk_0LHyeMkRiP-IIRjWKOjrrSHENy7R_BTsG1ZKzKpvLZGuRXMepA6KzW2HqRs2F74\/w640-h384\/kExReadTextFile.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/7590027444572217533\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/7590027444572217533","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7590027444572217533"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7590027444572217533"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2021\/01\/read-text-file-with-request-permission.html","title":"Android read text file with request permission at runtime"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/DRsnrKtUuQc\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-2942708035513832959"},"published":{"$t":"2020-12-17T10:55:00.002-08:00"},"updated":{"$t":"2020-12-17T10:58:36.645-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"}],"title":{"type":"text","$t":"Android Kotlin exercise: detect touch on individual view"},"content":{"type":"html","$t":"\u003Cp\u003E\u0026nbsp;This example show how to detect touch on individual view.\u003C\/p\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/tZB2iKwL2NI\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E\nExample code\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\npackage com.blogspot.android_er.exmyview\n\nimport android.os.Build\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.view.MotionEvent\nimport android.widget.ImageView\nimport android.widget.TextView\n\n\/*\nref: \nhttps:\/\/developer.android.com\/training\/gestures\/detector#capture-touch-events-for-a-single-view\nAndroid Developers Guides \u0026gt; Detect common gestures \u0026gt; Capture touch events for a single view\n *\/\n\nclass MainActivity : AppCompatActivity() {\n    private lateinit var ivIcon: ImageView\n    private lateinit var tvSysInfo: TextView\n    private lateinit var tvSdkInfo: TextView\n    private lateinit var tvConsole: TextView\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        ivIcon = findViewById(R.id.icon)\n        tvSysInfo = findViewById(R.id.sysinfo)\n        tvSdkInfo = findViewById(R.id.sdkinfo)\n        tvConsole = findViewById(R.id.console)\n\n        val manufacturer = Build.MANUFACTURER\n        val model = Build.MODEL\n        val release = Build.VERSION.RELEASE\n\n        val pkgInfo = packageManager.getPackageInfo(packageName, 0)\n        val appInfo = pkgInfo.applicationInfo\n        val targetSdkVersion = appInfo.targetSdkVersion\n        val minSdkVersion = appInfo.minSdkVersion\n\n        tvSysInfo.text = manufacturer + \"\\n\" +\n                model + \"\\n\" + \"Android: \" + release\n        tvSdkInfo.text = \"targetSdkVersion: \" + targetSdkVersion + \"\\n\" +\n                \"minSdkVersion: \" + minSdkVersion\n\n        tvConsole.text = \"Android Example:\" +\n                \"\\nCapture touch events for a single view\"\n\n        ivIcon.setOnTouchListener { v, event -\u0026gt; \/\/ ... Respond to touch events\n            \/*\n            return true if the listener has consumed the event, false otherwise.\n             *\/\n            val action = event.action\n            when (action) {\n                MotionEvent.ACTION_DOWN -\u0026gt; {\n                    \/*\n                    Beware of creating a listener that returns false\n                    for the ACTION_DOWN event.\n                    If you do this, the listener will not be called\n                    for the subsequent ACTION_MOVE and ACTION_UP string of events.\n                    This is because ACTION_DOWN is the starting point for all touch events.\n                     *\/\n\n                    tvConsole.text = \"ACTION_DOWN@ivIcon\"\n\n                    true}\n                MotionEvent.ACTION_MOVE -\u0026gt; {\n                    tvConsole.append(\"\\nACTION_MOVE@ivIcon\")\n                    true}\n                MotionEvent.ACTION_UP -\u0026gt; {\n                    tvConsole.text = \"ACTION_UP@ivIcon\"\n                    true}\n                MotionEvent.ACTION_CANCEL -\u0026gt; {\n                    tvConsole.text = \"ACTION_CANCEL@ivIcon\"\n                    true}\n                MotionEvent.ACTION_OUTSIDE -\u0026gt; {\n                    tvConsole.text = \"ACTION_OUTSIDE@ivIcon\"\n                    true}\n                else -\u0026gt; super.onTouchEvent(event)\n            }\n\n        }\n\n        tvSysInfo.setOnTouchListener { v, event -\u0026gt; \/\/ ... Respond to touch events\n\n            when (event.action) {\n                MotionEvent.ACTION_DOWN -\u0026gt; {\n                    tvConsole.text = \"ACTION_DOWN@tvSysInfo\"\n                    true}\n                MotionEvent.ACTION_MOVE -\u0026gt; {\n                    tvConsole.append(\"\\nACTION_MOVE@tvSysInfo\")\n                    true}\n                MotionEvent.ACTION_UP -\u0026gt; {\n                    tvConsole.text = \"ACTION_UP@tvSysInfo\"\n                    true}\n                MotionEvent.ACTION_CANCEL -\u0026gt; {\n                    tvConsole.text = \"ACTION_CANCEL@tvSysInfo\"\n                    true}\n                MotionEvent.ACTION_OUTSIDE -\u0026gt; {\n                    tvConsole.text = \"ACTION_OUTSIDE@tvSysInfo\"\n                    true}\n                else -\u0026gt; super.onTouchEvent(event)\n            }\n        }\n\n        tvSdkInfo.setOnTouchListener { v, event -\u0026gt; \/\/ ... Respond to touch events\n\n            when (event.action) {\n                MotionEvent.ACTION_DOWN -\u0026gt; {\n                    tvConsole.text = \"ACTION_DOWN@tvSdkInfo\"\n                    true}\n                MotionEvent.ACTION_MOVE -\u0026gt; {\n                    tvConsole.append(\"\\nACTION_MOVE@tvSdkInfo\")\n                    true}\n                MotionEvent.ACTION_UP -\u0026gt; {\n                    tvConsole.text = \"ACTION_UP@tvSdkInfo\"\n                    true}\n                MotionEvent.ACTION_CANCEL -\u0026gt; {\n                    tvConsole.text = \"ACTION_CANCEL@tvSdkInfo\"\n                    true}\n                MotionEvent.ACTION_OUTSIDE -\u0026gt; {\n                    tvConsole.text = \"ACTION_OUTSIDE@tvSdkInfo\"\n                    true}\n                else -\u0026gt; super.onTouchEvent(event)\n            }\n        }\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\nlayout\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;LinearLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"horizontal\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/leftpanel\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\"\n        android:orientation=\"vertical\"\n        android:background=\"#E0E0E0\"\n        android:layout_margin=\"5dp\"\u0026gt;\n\n        \u0026lt;ImageView\n            android:id=\"@+id\/icon\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"5dp\"\n            android:padding=\"5dp\"\n            android:background=\"#0000F0\"\n            android:src=\"@mipmap\/ic_launcher_round\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/sysinfo\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"5dp\"\n            android:padding=\"5dp\"\n            android:background=\"#0000D0\"\n            android:textSize=\"20dp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"@color\/white\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/sdkinfo\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"5dp\"\n            android:padding=\"5dp\"\n            android:background=\"#0000B0\"\n            android:textSize=\"20dp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"@color\/white\"\/\u0026gt;\n\n    \u0026lt;\/LinearLayout\u0026gt;\n\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/rightpanel\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\"\n        android:orientation=\"vertical\"\n        android:background=\"#C0C0C0\"\u0026gt;\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"5dp\"\n            android:padding=\"5dp\"\n            android:textSize=\"20dp\"\n            android:textStyle=\"bold\"\n            android:textColor=\"@color\/white\"\n            android:text=\"android-er.blogspot.com\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/console\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"5dp\"\n            android:padding=\"5dp\"\n            android:textSize=\"30dp\"\n            android:textStyle=\"bold\"\n            android:gravity=\"bottom\"\/\u0026gt;\n    \u0026lt;\/LinearLayout\u0026gt;\n\u0026lt;\/LinearLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/2942708035513832959\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/2942708035513832959","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2942708035513832959"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2942708035513832959"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/12\/android-kotlin-exercise-detect-touch-on.html","title":"Android Kotlin exercise: detect touch on individual view"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/tZB2iKwL2NI\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-8692621850953308891"},"published":{"$t":"2020-12-11T11:27:00.004-08:00"},"updated":{"$t":"2020-12-11T11:27:33.517-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Linux Mint"}],"title":{"type":"text","$t":"Linux Mint: Add Program Launcher to Menu"},"content":{"type":"html","$t":"\u003Cp\u003EAs a example, this video show how to Add Program Launcher to Menu on Linux Mint 20, to run idea.sh in \/opt\/idea-IC-203.5981.155\/bin folder.\u003C\/p\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/0CFNCkMKp44\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003Ccenter\u003E\u003C\/center\u003E\u003C\/center\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/8692621850953308891\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/8692621850953308891","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8692621850953308891"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8692621850953308891"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/12\/linux-mint-add-program-launcher-to-menu.html","title":"Linux Mint: Add Program Launcher to Menu"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/0CFNCkMKp44\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-3854946957385426368"},"published":{"$t":"2020-12-10T15:06:00.005-08:00"},"updated":{"$t":"2020-12-11T11:29:16.450-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Development Tools"},{"scheme":"http://www.blogger.com/atom/ns#","term":"IntelliJ IDEA"},{"scheme":"http://www.blogger.com/atom/ns#","term":"learn Kotlin"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Linux Mint"}],"title":{"type":"text","$t":"Install IntelliJ IDEA on Linux Mint 20"},"content":{"type":"html","$t":"Steps to install Jetbrains IntelliJ IDEA\u0026nbsp;Community Edition 2020.3 on Linux Mint 20, tested on VirtualBox.\u003Cdiv\u003E\u0026nbsp; \n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/0e1SVL7j0_8\" width=\"560\"\u003E\u003C\/iframe\u003E\u003C\/center\u003E\n\n\u003Cp\u003EIntelliJ IDEA is a cross-platform IDE on the Windows, macOS, and Linux operating systems. It is available in the following editions:\u003C\/p\u003E\u003Cul style=\"text-align: left;\"\u003E\u003Cli\u003ECommunity Edition is free and open-source, licensed under Apache 2.0. It provides all the basic features for JVM and Android development.\u003C\/li\u003E\u003Cli\u003EIntelliJ IDEA Ultimate is commercial, distributed with a 30-day trial period. It provides additional tools and features for web and enterprise development.\u003C\/li\u003E\u003C\/ul\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cb\u003ETo install\u0026nbsp;IntelliJ IDEA Community Edition on Linux Mint:\u003C\/b\u003E\u003C\/p\u003E\u003Cp\u003EVisit: \u003Ca href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\"\u003Ehttps:\/\/www.jetbrains.com\/idea\/download\/\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003EDownload .tar.gz of Community Edition.\u003C\/p\u003E\u003Cp\u003EExtract the tarball to a directory that supports file execution.\u003Cbr \/\u003EFor example, to extract it to the recommended \/opt directory, run the following command:\u003C\/p\u003E\u003Cp\u003E$ sudo tar -xzf \u0026lt;downloaded file\u0026gt; -C \/opt\u003C\/p\u003E\u003Cp\u003EExecute the idea.sh script from the extracted directory to run IntelliJ IDEA. or \u003Ca href=\"https:\/\/android-er.blogspot.com\/2020\/12\/linux-mint-add-program-launcher-to-menu.html\"\u003E\u003Cb\u003Eadd a program launcher to Linux Mint Menu to run idea.sh\u003C\/b\u003E\u003C\/a\u003E.\u003C\/p\u003E\u003Cp\u003Eref:\u0026nbsp;\u003Ca href=\"https:\/\/www.jetbrains.com\/help\/idea\/installation-guide.html\" target=\"_blank\"\u003Ehttps:\/\/www.jetbrains.com\/help\/idea\/installation-guide.html\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/3854946957385426368\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/3854946957385426368","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/3854946957385426368"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/3854946957385426368"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/12\/install-intellij-idea-on-linux-mint-20.html","title":"Install IntelliJ IDEA on Linux Mint 20"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/0e1SVL7j0_8\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-7815224635978205422"},"published":{"$t":"2020-11-14T06:59:00.002-08:00"},"updated":{"$t":"2020-11-14T06:59:58.742-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"how to"}],"title":{"type":"text","$t":"How to power-on without using POWER button, Xiaomi\/Redmi Phone"},"content":{"type":"html","$t":"It is a common case that the POWER button of your phone is broken, such that you cannot power it on in power-off mode. This video show how to power up\u0026nbsp;Xiaomi phone in Recovery Mode, then switch to normal mode, without POWER button.\u003Cdiv\u003E\u0026nbsp;\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/gfX93p7_jFg\" width=\"560\"\u003E\u003C\/iframe\u003E\u003C\/center\u003E\n\u003Cbr \/\u003E\n\u003Cp\u003E\u003Cb\u003EHow to power-on without using POWER button, Xiaomi\/Redmi Phone\u003C\/b\u003E\u003C\/p\u003E\u003Cp\u003EWhen phone is Power OFF:\u003Cbr \/\u003EPress and Hold VOL-UP button, Insert USB Power cable, to enter Recovery Mode.\u003C\/p\u003E\u003Cp\u003EWith Reboot option selected, just WAIT, the phone will reboot in around 4 minutes.\u003C\/p\u003E\u003Cp\u003ETested on Xiaomi Mi 10 Lite 5G, also Redmi 5 Plus\/Note 4X.\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/7815224635978205422\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/7815224635978205422","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7815224635978205422"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7815224635978205422"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/11\/how-to-power-on-without-using-power.html","title":"How to power-on without using POWER button, Xiaomi\/Redmi Phone"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/gfX93p7_jFg\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-8052536679207881350"},"published":{"$t":"2020-11-02T13:02:00.004-08:00"},"updated":{"$t":"2020-11-03T12:25:15.321-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"}],"title":{"type":"text","$t":"Android exercise: ImageFilterView (Kotlin)"},"content":{"type":"html","$t":"\u003Cp\u003E\u003Cb\u003E\u003Ca href=\"https:\/\/developer.android.com\/reference\/androidx\/constraintlayout\/utils\/widget\/ImageFilterView\" target=\"_blank\"\u003EImageFilterView\u003C\/a\u003E\u003C\/b\u003E is a An ImageView that can display, combine and filter images, to handle various common filtering operations. You can set\u0026nbsp;saturation, contrast, warmth and some othters (refer to the document) in layout XML, or change it at run-time.\u003C\/p\u003E\u003Cp\u003E\n\u003C\/p\u003E\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/HQIOdMTPuOY\" width=\"560\"\u003E\u003C\/iframe\u003E  \n\u003C\/center\u003E\n\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003EImageFilterView was added in ConstraintLayout 2.0, so make sure\u0026nbsp;dependencies of\u0026nbsp;implementation 'androidx.constraintlayout:constraintlayout:2.0.0' or higher is include in your build.grade(Module:) file.\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj4vJ2-dRhbvq1Nyf1iEPHTpHi8RIGhqpEa4Bp3sSDqvzTlB2LaJcNHO9dsIzf9SWWCbxRKPINnc-Ugo9wgra5jBnQV00GT-EEu95dBEVwSKKiU7t-NLUn4Ne_GFJcetP6Ekxtvdxh_pnk\/s1366\/ConstraintLayout+dependencies.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"360\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj4vJ2-dRhbvq1Nyf1iEPHTpHi8RIGhqpEa4Bp3sSDqvzTlB2LaJcNHO9dsIzf9SWWCbxRKPINnc-Ugo9wgra5jBnQV00GT-EEu95dBEVwSKKiU7t-NLUn4Ne_GFJcetP6Ekxtvdxh_pnk\/w640-h360\/ConstraintLayout+dependencies.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003Ebuild.grade(Module:)\u003Cbr \/\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Edependencies {\n    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E  \nLayout XML:\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:layout_margin=\"20dp\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/header\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintBottom_toTopOf=\"@id\/imagefilterview\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:text=\"ImageFilterView Example (Kotlin)\"\n            android:textStyle=\"bold\" \/\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:text=\"Android-er.blogspot.com\" \/\u0026gt;\n        \u0026lt;ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@android:mipmap\/sym_def_app_icon\"\/\u0026gt;\n\n    \u0026lt;\/LinearLayout\u0026gt;\n\n    \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003E\u0026lt;androidx.constraintlayout.utils.widget.ImageFilterView\n        android:id=\"@+id\/imagefilterview\"\n        android:src=\"@android:mipmap\/sym_def_app_icon\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        app:layout_constraintBottom_toTopOf=\"@id\/panel\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id\/header\"\n        app:saturation=\"1.0\"\n        app:contrast=\"1.0\"\n        app:brightness=\"1.0\"\/\u0026gt;\u003C\/span\u003E\u003C\/b\u003E\n\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/panel\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id\/imagefilterview\"\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Saturation\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/sat\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarSat\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"50\"\/\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Contrast\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/cont\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarCont\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"50\"\/\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Warmth\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/warm\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarWarm\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"50\"\/\u0026gt;\n    \u0026lt;\/LinearLayout\u0026gt;\n\n\u0026lt;\/androidx.constraintlayout.widget.ConstraintLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003Cdiv\u003EKotlin code:\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage com.blogspot.android_er.eximgfilterview2\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.widget.SeekBar\nimport android.widget.TextView\nimport androidx.constraintlayout.utils.widget.ImageFilterView\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val MyImageFilterView =\n                findViewById\u0026lt;ImageFilterView\u0026gt;(R.id.imagefilterview)\n\n        val MySeekBarSat = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarSat)\n        val MyTextViewSat = findViewById\u0026lt;TextView\u0026gt;(R.id.sat)\n        val MySeekBarCont = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarCont)\n        val MyTextViewCont = findViewById\u0026lt;TextView\u0026gt;(R.id.cont)\n        val MySeekBarWarm = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarWarm)\n        val MyTextViewWarm = findViewById\u0026lt;TextView\u0026gt;(R.id.warm)\n\n        \/\/Get the first-run setting of saturation, contrast and warmth\n        MyTextViewSat.text= MyImageFilterView.saturation.toString()\n        MyTextViewCont.text= MyImageFilterView.contrast.toString()\n        MyTextViewWarm.text= MyImageFilterView.warmth.toString()\n\n        MySeekBarSat.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n            override fun onProgressChanged(seekBar: SeekBar?,\n                                           progress: Int, fromUser: Boolean) {\n                \/\/update saturation\n                MyImageFilterView.saturation = (progress \/ 100.0f) * 2\n                \/\/read back the saturation\n                MyTextViewSat.text= MyImageFilterView.saturation.toString()\n            }\n\n            override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n            override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n        })\n\n        MySeekBarCont.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n            override fun onProgressChanged(seekBar: SeekBar?,\n                                           progress: Int, fromUser: Boolean) {\n                MyImageFilterView.contrast = (progress \/ 100.0f) * 2\n                MyTextViewCont.text= MyImageFilterView.contrast.toString()\n            }\n\n            override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n            override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n        })\n\n        MySeekBarWarm.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n            override fun onProgressChanged(seekBar: SeekBar?,\n                                           progress: Int, fromUser: Boolean) {\n                MyImageFilterView.warmth = (progress \/ 100.0f) * 2\n                MyTextViewWarm.text= MyImageFilterView.warmth.toString()\n            }\n\n            override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n            override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n        })\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003C\/div\u003E\u003Cdiv\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003C\/div\u003E\u003Chr \/\u003E\nThen add the feature to change Crossfade, also show how overlay setting affect the crossfade result.\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/5ggjjWsn-BA\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003ELayout XML:\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:layout_margin=\"20dp\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/header\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintBottom_toTopOf=\"@id\/imagefilterview\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:text=\"ImageFilterView Example (Kotlin)\"\n            android:textStyle=\"bold\" \/\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:text=\"Android-er.blogspot.com\" \/\u0026gt;\n        \u0026lt;ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@android:mipmap\/sym_def_app_icon\"\/\u0026gt;\n\n    \u0026lt;\/LinearLayout\u0026gt;\n\n    \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003E\u0026lt;androidx.constraintlayout.utils.widget.ImageFilterView\n        android:id=\"@+id\/imagefilterview\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        app:layout_constraintBottom_toTopOf=\"@id\/panel\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id\/header\"\n\n        android:src=\"@android:mipmap\/sym_def_app_icon\"\n        app:altSrc=\"@android:drawable\/btn_star_big_on\"\n        app:overlay=\"false\"\n        app:crossfade=\"0.0\"\n        app:saturation=\"1.0\"\n        app:contrast=\"1.0\"\n        app:warmth=\"1.0\"\n         \/\u0026gt;\n\u003C\/span\u003E\u003C\/b\u003E\n    \u0026lt;LinearLayout\n        android:id=\"@+id\/panel\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id\/imagefilterview\"\u0026gt;\n\n        \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003E\u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Crossfade\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/crossfade\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarCrossfade\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"0\"\/\u0026gt;\u003C\/span\u003E\u003C\/b\u003E\n\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Saturation\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/sat\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarSat\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"50\"\/\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Contrast\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/cont\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarCont\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"50\"\/\u0026gt;\n\n        \u0026lt;TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Warmth\"\/\u0026gt;\n        \u0026lt;TextView\n            android:id=\"@+id\/warm\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\/\u0026gt;\n        \u0026lt;SeekBar\n            android:id=\"@+id\/seekBarWarm\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:max=\"100\"\n            android:progress=\"50\"\/\u0026gt;\n    \u0026lt;\/LinearLayout\u0026gt;\n\n\u0026lt;\/androidx.constraintlayout.widget.ConstraintLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv\u003EKotlin code:\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan\u003Epackage com.blogspot.android_er.eximgfilterview2\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.widget.SeekBar\nimport android.widget.TextView\nimport androidx.constraintlayout.utils.widget.ImageFilterView\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val MyImageFilterView =\n                findViewById\u0026lt;ImageFilterView\u0026gt;(R.id.imagefilterview)\n\n        \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003Eval MySeekBarCrossfade = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarCrossfade)\n        val MyTextViewCrossfade = findViewById\u0026lt;TextView\u0026gt;(R.id.crossfade)\u003C\/span\u003E\u003C\/b\u003E\n\n        val MySeekBarSat = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarSat)\n        val MyTextViewSat = findViewById\u0026lt;TextView\u0026gt;(R.id.sat)\n        val MySeekBarCont = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarCont)\n        val MyTextViewCont = findViewById\u0026lt;TextView\u0026gt;(R.id.cont)\n        val MySeekBarWarm = findViewById\u0026lt;SeekBar\u0026gt;(R.id.seekBarWarm)\n        val MyTextViewWarm = findViewById\u0026lt;TextView\u0026gt;(R.id.warm)\n\n        \/\/Get the first-run setting of crossfade, saturation, contrast and warmth\n        \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003EMyTextViewCrossfade.text= MyImageFilterView.crossfade.toString()\u003C\/span\u003E\u003C\/b\u003E\n        MyTextViewSat.text= MyImageFilterView.saturation.toString()\n        MyTextViewCont.text= MyImageFilterView.contrast.toString()\n        MyTextViewWarm.text= MyImageFilterView.warmth.toString()\n\n        \u003Cb\u003E\u003Cspan style=\"color: red;\"\u003EMySeekBarCrossfade.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n                    override fun onProgressChanged(seekBar: SeekBar?,\n                                                   progress: Int, fromUser: Boolean) {\n                        \/\/update saturation\n                        MyImageFilterView.crossfade = (progress \/ 100.0f)\n                        \/\/read back the saturation\n                        MyTextViewCrossfade.text= MyImageFilterView.crossfade.toString()\n                    }\n\n                    override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n                    override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n                })\u003C\/span\u003E\u003C\/b\u003E\n\n        MySeekBarSat.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n            override fun onProgressChanged(seekBar: SeekBar?,\n                                           progress: Int, fromUser: Boolean) {\n                \/\/update saturation\n                MyImageFilterView.saturation = (progress \/ 100.0f) * 2\n                \/\/read back the saturation\n                MyTextViewSat.text= MyImageFilterView.saturation.toString()\n            }\n\n            override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n            override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n        })\n\n        MySeekBarCont.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n            override fun onProgressChanged(seekBar: SeekBar?,\n                                           progress: Int, fromUser: Boolean) {\n                MyImageFilterView.contrast = (progress \/ 100.0f) * 2\n                MyTextViewCont.text= MyImageFilterView.contrast.toString()\n            }\n\n            override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n            override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n        })\n\n        MySeekBarWarm.setOnSeekBarChangeListener(\n                object : SeekBar.OnSeekBarChangeListener{\n            override fun onProgressChanged(seekBar: SeekBar?,\n                                           progress: Int, fromUser: Boolean) {\n                MyImageFilterView.warmth = (progress \/ 100.0f) * 2\n                MyTextViewWarm.text= MyImageFilterView.warmth.toString()\n            }\n\n            override fun onStartTrackingTouch(seekBar: SeekBar?) {}\n\n            override fun onStopTrackingTouch(seekBar: SeekBar?) {}\n        })\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/8052536679207881350\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/8052536679207881350","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8052536679207881350"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8052536679207881350"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/11\/android-exercise-imagefilterview-kotlin.html","title":"Android exercise: ImageFilterView (Kotlin)"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/HQIOdMTPuOY\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-4648700565529113411"},"published":{"$t":"2020-10-11T14:08:00.001-07:00"},"updated":{"$t":"2020-10-11T14:08:47.169-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Studio.how to"}],"title":{"type":"text","$t":"What's the difference between system image with Google API and Google APIs? when create Android Virtual Device"},"content":{"type":"html","$t":"\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjrB0UQ5_BF88j-WtlYRYoTWACesq-DSpfsuZcAg6Lr98jA7lEFfO5Xk6L9ip2ZyyIyKRj45zAxsUonyPq8_bdWWk6rmu4c_rYx0COmQ89SzfxTljvkNLQJ-r_b2MpD1DCY30dv7CEXmBY\/s1366\/Select+a+system+image.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"360\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjrB0UQ5_BF88j-WtlYRYoTWACesq-DSpfsuZcAg6Lr98jA7lEFfO5Xk6L9ip2ZyyIyKRj45zAxsUonyPq8_bdWWk6rmu4c_rYx0COmQ89SzfxTljvkNLQJ-r_b2MpD1DCY30dv7CEXmBY\/w640-h360\/Select+a+system+image.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003EWhen you create a Android Virtual Device, you have to select a system image from a list of available images. Some marked Google Play, and some marked Google APIs, so what's the difference?\u003C\/p\u003E\u003Cp\u003E\u003Ci\u003E\u003Cb\u003EA system image labeled with Google APIs includes access to Google Play services. A system image labeled with the Google Play logo in the Play Store column includes the Google Play Store app and access to Google Play services.\u003C\/b\u003E\u003C\/i\u003E\u003C\/p\u003E\u003Cp\u003Ereference:\u0026nbsp;\u003Ca href=\"https:\/\/developer.android.com\/studio\/run\/managing-avds#system-image\" target=\"_blank\"\u003Ehttps:\/\/developer.android.com\/studio\/run\/managing-avds#system-image\u003C\/a\u003E\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjfEWSsz7uWnsZTAF1pSqahLQM32tugUBPlTpu_QV1W4eA1RQ4QBa-8fU18ABCmqBO4N7JNQk4Z9LySymP2OmFdtiMgWdnoMiWTk0nxHgKaQJ86gAPfiwI-NCdjU5Vb-tS0qgAQlWNsohs\/s1366\/System+Images.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"360\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjfEWSsz7uWnsZTAF1pSqahLQM32tugUBPlTpu_QV1W4eA1RQ4QBa-8fU18ABCmqBO4N7JNQk4Z9LySymP2OmFdtiMgWdnoMiWTk0nxHgKaQJ86gAPfiwI-NCdjU5Vb-tS0qgAQlWNsohs\/w640-h360\/System+Images.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp\u003E\u003Ci\u003EIncluding a Google Play tab in the Extended controls dialog that provides a convenient button for updating Google Play services on the device.\u003C\/i\u003E\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg3dQNCYEldUE1Fd3Jjn30e-wyiJsyX0ZGL9bpLB1THzQYgEWPAO310npowMEPIgrh5Xxbw9NLiexb5_3r-nZ0MZhbYlFpt3FSaYRosoxD-cCfm6B1wLXPgi3WjivpIJ4rartMC65bRfOw\/s1366\/Google+Play+Services.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"360\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg3dQNCYEldUE1Fd3Jjn30e-wyiJsyX0ZGL9bpLB1THzQYgEWPAO310npowMEPIgrh5Xxbw9NLiexb5_3r-nZ0MZhbYlFpt3FSaYRosoxD-cCfm6B1wLXPgi3WjivpIJ4rartMC65bRfOw\/w640-h360\/Google+Play+Services.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/4648700565529113411\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/4648700565529113411","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/4648700565529113411"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/4648700565529113411"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/10\/whats-difference-between-system-image.html","title":"What's the difference between system image with Google API and Google APIs? when create Android Virtual Device"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjrB0UQ5_BF88j-WtlYRYoTWACesq-DSpfsuZcAg6Lr98jA7lEFfO5Xk6L9ip2ZyyIyKRj45zAxsUonyPq8_bdWWk6rmu4c_rYx0COmQ89SzfxTljvkNLQJ-r_b2MpD1DCY30dv7CEXmBY\/s72-w640-h360-c\/Select+a+system+image.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-4037992588471410115"},"published":{"$t":"2020-09-03T06:57:00.002-07:00"},"updated":{"$t":"2020-09-03T06:59:53.440-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Developer's news"}],"title":{"type":"text","$t":"Kotlin Multiplatform Mobile Alpha and portal released"},"content":{"type":"html","$t":"\u003Cp\u003EKotlin Multiplatform Mobile is a solution to write once for Android and iOS apps, using Kotlin.\u003C\/p\u003E\u003Cp\u003EKotlin Multiplatform Mobile is an SDK that allows developers to use the same business logic code in both iOS and Android applications. KMM now goes Alpha, and you can start sharing business logic in your mobile apps with it right away. It includes the new KMM Plugin for Android Studio, which allows you to write, run, test, and debug shared code in the same IDE.\u003C\/p\u003E\u003Cp\u003Edetails: \u003Ca href=\"https:\/\/blog.jetbrains.com\/kotlin\/2020\/08\/kotlin-multiplatform-mobile-goes-alpha\/\" target=\"_blank\"\u003EKotlin Blog -\u0026nbsp;Kotlin Multiplatform Mobile Goes Alpha\u003C\/a\u003E\u003C\/p\u003E\u003Cp\u003EThe new\u0026nbsp;\u003Ca href=\"https:\/\/kotlinlang.org\/lp\/mobile\/\" target=\"_blank\"\u003EKotlin Multiplatform Mobile developer portal\u003C\/a\u003E is up, have all you need to know to create cross-platform apps.\u003C\/p\u003E\u003Cp\u003E\u003Cbr \/\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/4037992588471410115\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/4037992588471410115","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/4037992588471410115"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/4037992588471410115"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/09\/kotlin-multiplatform-mobile-alpha-and.html","title":"Kotlin Multiplatform Mobile Alpha and portal released"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-7973533318955255442"},"published":{"$t":"2020-08-26T10:44:00.005-07:00"},"updated":{"$t":"2020-08-26T10:44:52.614-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.android.widget"}],"title":{"type":"text","$t":"Chronometer example (Kotlin)"},"content":{"type":"html","$t":"\u003Cp\u003E\u0026nbsp;\u003Cspan color=\"\" face=\"\" style=\"white-space: pre-wrap;\"\u003EAndroid example of using Chronometer (count-up and count-down) widget, with Kotlin\u003C\/span\u003E\u003C\/p\u003E\u003Ccenter\u003E\u003Cspan color=\"\" face=\"\" style=\"white-space: pre-wrap;\"\u003E\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/INZ0Mg-mYwY\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/span\u003E\u003C\/center\u003E\u003Cspan color=\"\" face=\"\" style=\"white-space: pre-wrap;\"\u003E\n\u003C\/span\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cspan color=\"\" face=\"\" style=\"white-space: pre-wrap;\"\u003ELayout with Chronometer\u003C\/span\u003E\u003C\/p\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;LinearLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    tools:context=\".MainActivity\"\n    android:layout_margin=\"10dp\"\u0026gt;\n\n    \u0026lt;TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textStyle=\"bold\"\n        android:text=\"Chronometer Example (Kotlin)\"\n        android:layout_gravity=\"center\"\/\u0026gt;\n    \u0026lt;TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Android-er.blogspot.com\"\n        android:layout_gravity=\"center\"\/\u0026gt;\n    \u0026lt;Chronometer\n        android:id=\"@+id\/chronometer\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"34dp\"\n        android:textStyle=\"bold\"\/\u0026gt;\n    \u0026lt;Button\n        android:id=\"@+id\/start\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Start (Count Up)\"\/\u0026gt;\n    \u0026lt;Button\n        android:id=\"@+id\/stop\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Stop\"\/\u0026gt;\n    \u0026lt;Button\n        android:id=\"@+id\/reset\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Reset\"\/\u0026gt;\n\n    \u0026lt;Chronometer\n        android:id=\"@+id\/chronometerDn\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"34dp\"\n        android:textStyle=\"bold\"\n        android:countDown=\"true\"\/\u0026gt;\n    \u0026lt;Button\n        android:id=\"@+id\/startDn\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Start (Count Down)\"\/\u0026gt;\n    \u0026lt;Button\n        android:id=\"@+id\/stopDn\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Stop\"\/\u0026gt;\n    \u0026lt;Button\n        android:id=\"@+id\/resetDn\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Reset\"\/\u0026gt;\n\n\u0026lt;\/LinearLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\nAndroid Kotlin code\u003Cdiv\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage com.blogspot.android_er.androidchronometer\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.os.SystemClock\nimport android.widget.Button\nimport android.widget.Chronometer\nimport android.widget.Toast\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val myChronometer = findViewById\u0026lt;Chronometer\u0026gt;(R.id.chronometer)\n        val btnStart = findViewById\u0026lt;Button\u0026gt;(R.id.start)\n        val btnStop = findViewById\u0026lt;Button\u0026gt;(R.id.stop)\n        val btnReset = findViewById\u0026lt;Button\u0026gt;(R.id.reset)\n\n        btnStart.setOnClickListener(){\n            myChronometer.start();\n            Toast.makeText(this,\n                    \"myChronometer.start()\",\n                    Toast.LENGTH_LONG).show()\n        }\n\n        btnStop.setOnClickListener(){\n            myChronometer.stop();\n            Toast.makeText(this,\n                    \"myChronometer.stop()\",\n                    Toast.LENGTH_LONG).show()\n        }\n\n        btnReset.setOnClickListener(){\n            myChronometer.base = SystemClock.elapsedRealtime()\n            Toast.makeText(this,\n                    \"myChronometer.base = SystemClock.elapsedRealtime()\",\n                    Toast.LENGTH_LONG).show()\n        }\n\n        val myChronometerDn = findViewById\u0026lt;Chronometer\u0026gt;(R.id.chronometerDn)\n        val btnStartDn = findViewById\u0026lt;Button\u0026gt;(R.id.startDn)\n        val btnStopDn = findViewById\u0026lt;Button\u0026gt;(R.id.stopDn)\n        val btnResetDn = findViewById\u0026lt;Button\u0026gt;(R.id.resetDn)\n\n        btnStartDn.setOnClickListener(){\n            myChronometerDn.base = SystemClock.elapsedRealtime() + 10000\n            myChronometerDn.start()\n            Toast.makeText(this,\n                    \"myChronometerDn.base = \" +\n                            \"SystemClock.elapsedRealtime() + 10000 \\n\" +\n                            \"myChronometerDn.start()\",\n                    Toast.LENGTH_LONG).show()\n        }\n\n        btnStopDn.setOnClickListener(){\n            myChronometerDn.stop()\n            Toast.makeText(this,\n                    \"myChronometerDn.stop()\",\n                    Toast.LENGTH_LONG).show()\n        }\n\n        btnResetDn.setOnClickListener(){\n            myChronometerDn.base = SystemClock.elapsedRealtime()\n            Toast.makeText(this,\n                    \"myChronometerDn.base = SystemClock.elapsedRealtime()\",\n                    Toast.LENGTH_LONG).show()\n        }\n\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/7973533318955255442\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/7973533318955255442","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7973533318955255442"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7973533318955255442"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/08\/chronometer-example-kotlin.html","title":"Chronometer example (Kotlin)"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/INZ0Mg-mYwY\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-2570138823957837780"},"published":{"$t":"2020-08-22T11:12:00.004-07:00"},"updated":{"$t":"2020-08-22T11:12:52.222-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.android.widget"}],"title":{"type":"text","$t":"Simple example using TextClock with Kotlin"},"content":{"type":"html","$t":"\u003Cp\u003E\u003Ca href=\"https:\/\/developer.android.com\/reference\/android\/widget\/TextClock\" target=\"_blank\"\u003ETextClock\u003C\/a\u003E can display the current date and\/or time as a formatted string. It's a simple example of using TextClock with Kotlin.\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjvzYG_Yw38Kn_245JHo9kVlMVVraDaGn0X8ZA_Khdmc8Rafd5NvVHZ-K-yvWEfNmU1kR2lqM3Q9ZPy9Vefjx9PGZGq0y6Bp5JpGOZTd-4hUlX6BifrX9JXBRWs-n_UQJ3pGaQJqwuvahc\/s1920\/TextClock.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1920\" data-original-width=\"1080\" height=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjvzYG_Yw38Kn_245JHo9kVlMVVraDaGn0X8ZA_Khdmc8Rafd5NvVHZ-K-yvWEfNmU1kR2lqM3Q9ZPy9Vefjx9PGZGq0y6Bp5JpGOZTd-4hUlX6BifrX9JXBRWs-n_UQJ3pGaQJqwuvahc\/s640\/TextClock.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cp\u003Elayout XML with TextClock\u003C\/p\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;TextClock\n        android:id=\"@+id\/mytextclock\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textStyle=\"italic|bold\"\n        android:textSize=\"40dp\"\n        android:format12Hour=\"hh:mm:ss a\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        \/\u0026gt;\n\n\u0026lt;\/androidx.constraintlayout.widget.ConstraintLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cp\u003EAccess TextClock using Kotlin\u003C\/p\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage com.blogspot.android_er.androidtextclock\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextClock\nimport android.widget.Toast\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val myTextClock = findViewById\u0026lt;TextClock\u0026gt;(R.id.mytextclock)\n        myTextClock.setOnClickListener{\n            val s = myTextClock.text\n            Toast.makeText(this, s, Toast.LENGTH_LONG).show()\n        }\n\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/2570138823957837780\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/2570138823957837780","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2570138823957837780"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2570138823957837780"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/08\/simple-example-using-textclock-with.html","title":"Simple example using TextClock with Kotlin"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjvzYG_Yw38Kn_245JHo9kVlMVVraDaGn0X8ZA_Khdmc8Rafd5NvVHZ-K-yvWEfNmU1kR2lqM3Q9ZPy9Vefjx9PGZGq0y6Bp5JpGOZTd-4hUlX6BifrX9JXBRWs-n_UQJ3pGaQJqwuvahc\/s72-c\/TextClock.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-1521466111825104778"},"published":{"$t":"2020-08-21T13:44:00.001-07:00"},"updated":{"$t":"2020-08-21T13:44:03.798-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ex.Android.Kotlin"}],"title":{"type":"text","$t":"Get Android and SDK version using Kotlin"},"content":{"type":"html","$t":"\u003Cp\u003E\u0026nbsp;Exercise to get Android device info and compile SDK version using Kotlin.\u003C\/p\u003E\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEizDs3iV2aYC96G1sXquw5HEFbgJeaGO0XyiYYiuNI-6YZpnBurqBhHN31QnVIg-80TQVQcKJlv_QcLIKMmFLketYmTU8BUPp1TRtKbqb7m3Ejg9LIeXeExSwddEeJlOKWogXDKIG3xmGc\/s1366\/AndroidInfo.png\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEizDs3iV2aYC96G1sXquw5HEFbgJeaGO0XyiYYiuNI-6YZpnBurqBhHN31QnVIg-80TQVQcKJlv_QcLIKMmFLketYmTU8BUPp1TRtKbqb7m3Ejg9LIeXeExSwddEeJlOKWogXDKIG3xmGc\/s640\/AndroidInfo.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003ERun on Android Emulator of Android 10\u003Cbr \/\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003C\/tbody\u003E\u003C\/table\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg0SN9x72ix8A3n417A3mQJ0qVX9XfOaB_GWJ_GVrwO92Cr2Az6deoG4WVOQLiJM2c7aYOSxSzG1ls1ImcbSuVsQMqnDIaPJSpJpVw9dFbNAAFjIHpCTlOCqqGbBnuIDFokXpNuW3Iczt8\/s2160\/com.blogspot.android_er.androidinfo.jpg\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"2160\" data-original-width=\"1080\" height=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg0SN9x72ix8A3n417A3mQJ0qVX9XfOaB_GWJ_GVrwO92Cr2Az6deoG4WVOQLiJM2c7aYOSxSzG1ls1ImcbSuVsQMqnDIaPJSpJpVw9dFbNAAFjIHpCTlOCqqGbBnuIDFokXpNuW3Iczt8\/s640\/com.blogspot.android_er.androidinfo.jpg\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003ERun on Redmi 5 Plus (Android 8.1.0)\u003Cbr \/\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003C\/tbody\u003E\u003C\/table\u003E\u003Cp\u003EMainActivity.kt\u003C\/p\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003Epackage com.blogspot.android_er.androidinfo\n\nimport android.os.Build\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.widget.TextView\nimport androidx.annotation.RequiresApi\n\nclass MainActivity : AppCompatActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val manufacturer = Build.MANUFACTURER\n        val model = Build.MODEL\n        val release = Build.VERSION.RELEASE\n\n        val pkgInfo = packageManager.getPackageInfo(packageName, 0)\n        val appInfo = pkgInfo.applicationInfo\n        val targetSdkVersion = appInfo.targetSdkVersion\n        val minSdkVersion = appInfo.minSdkVersion\n\n        \/\/Display system and SDK info for reference\n        val tvInfo = findViewById\u0026lt;TextView\u0026gt;(R.id.info)\n        tvInfo.setText(manufacturer + \"\\n\"  +\n                model + \"\\n\" +\n                \"Android: \" + release + \"\\n\" +\n                \"targetSdkVersion: \" + targetSdkVersion + \"\\n\" +\n                \"minSdkVersion: \" + minSdkVersion)\n    }\n}\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\n\u003Cp\u003Elayout xml\u003C\/p\u003E\n\u003Cpre style=\"border: 1px solid black;\"\u003E\u003Ccode\u003E\u003Cspan style=\"color: black;\"\u003E\u0026lt;?xml version=\"1.0\" encoding=\"utf-8\"?\u0026gt;\n\u0026lt;LinearLayout\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    tools:context=\".MainActivity\"\u0026gt;\n\n    \u0026lt;TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Android-er\"\n        android:textStyle=\"bold\"\n        android:textSize=\"34dp\" \/\u0026gt;\n    \u0026lt;TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"android-er.blogspot.com   \" \/\u0026gt;\n    \u0026lt;TextView\n        android:id=\"@+id\/info\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textStyle=\"italic\"\n        android:textSize=\"30dp\"\/\u0026gt;\n\n\u0026lt;\/LinearLayout\u0026gt;\n\u003C\/span\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/1521466111825104778\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/1521466111825104778","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/1521466111825104778"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/1521466111825104778"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/08\/get-android-and-sdk-version-using-kotlin.html","title":"Get Android and SDK version using Kotlin"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEizDs3iV2aYC96G1sXquw5HEFbgJeaGO0XyiYYiuNI-6YZpnBurqBhHN31QnVIg-80TQVQcKJlv_QcLIKMmFLketYmTU8BUPp1TRtKbqb7m3Ejg9LIeXeExSwddEeJlOKWogXDKIG3xmGc\/s72-c\/AndroidInfo.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-5500516112497622052"},"published":{"$t":"2020-07-22T17:47:00.001-07:00"},"updated":{"$t":"2020-07-22T17:48:13.166-07:00"},"title":{"type":"text","$t":"Android Codelab - Getting Started with CameraX"},"content":{"type":"html","$t":"\u003Cp\u003EThe Android developer codelab, Getting Started with CameraX, guide you how to create a camera app that uses CameraX to show a viewfinder, take photos, and analyze an image stream from the camera.\u003C\/p\u003E\u003Cp\u003EIntroduce the concept of\u0026nbsp;\u003Cem\u003Euse cases\u003C\/em\u003E\u0026nbsp;in CameraX, which you can use for a variety of camera operations, from displaying a viewfinder to analyzing frames in real time.\u003C\/p\u003E\u003Cp\u003E\u003Ca href=\"https:\/\/codelabs.developers.google.com\/codelabs\/camerax-getting-started\/\"\u003EAndroid developer codelab, Getting Started with CameraX\u003C\/a\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/5500516112497622052\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/5500516112497622052","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/5500516112497622052"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/5500516112497622052"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/07\/android-codelab-getting-started-with.html","title":"Android Codelab - Getting Started with CameraX"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-8605212714646992684"},"published":{"$t":"2020-07-17T14:15:00.002-07:00"},"updated":{"$t":"2020-07-17T14:15:49.188-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"info"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Java"}],"title":{"type":"text","$t":"Support for newer Java language APIs"},"content":{"type":"html","$t":"\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/heCvGfOGH0s\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E\nWhen you use Android Gradle Plugin 4.0.0 and newer, you can now use several hundred APIs from newer OpenJDK versions and your app will work on any Android device? Some of these newer Java APIs in Android 11 are supported through backporting while other APIs are also available via desugaring on older devices where the Android platform does not have the APIs on the runtime.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nResources:\u003Cbr \/\u003E\nCheck out the website → \u003Ca href=\"https:\/\/goo.gle\/30FDT8S\" target=\"_blank\"\u003Ehttps:\/\/goo.gle\/30FDT8S\u003C\/a\u003E\u003Cbr \/\u003E\nFull list of supported Java 8+ APIs → \u003Ca href=\"https:\/\/goo.gle\/3enaGD5\" target=\"_blank\"\u003Ehttps:\/\/goo.gle\/3enaGD5\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/8605212714646992684\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/8605212714646992684","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8605212714646992684"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8605212714646992684"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/07\/support-for-newer-java-language-apis.html","title":"Support for newer Java language APIs"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/heCvGfOGH0s\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-7253205312275562817"},"published":{"$t":"2020-05-28T17:59:00.002-07:00"},"updated":{"$t":"2020-05-28T17:59:37.261-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Studio"}],"title":{"type":"text","$t":"What's new in Android Studio 4.0"},"content":{"type":"html","$t":"\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/f1fHPqAYj5I\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E\nThe Android Studio 4.0 release introduces a new Motion Editor, Build Speed window, Live Layout inspector, Multi Preview for your layouts, support for Kotlin DSL script files, and a Smart editor for R8 rules.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe new Build Analyzer feature helps you understand and diagnose issues with your build process, such as disabled optimizations and improperly configured tasks."},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/7253205312275562817\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/7253205312275562817","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7253205312275562817"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/7253205312275562817"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/05\/whats-new-in-android-studio-40.html","title":"What's new in Android Studio 4.0"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/f1fHPqAYj5I\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-2945733289250652905"},"published":{"$t":"2020-05-23T08:27:00.001-07:00"},"updated":{"$t":"2020-05-23T08:27:35.277-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"info"},{"scheme":"http://www.blogger.com/atom/ns#","term":"maker"},{"scheme":"http://www.blogger.com/atom/ns#","term":"news"}],"title":{"type":"text","$t":"Virtually Maker Faire – May 23, 2020"},"content":{"type":"html","$t":"\u003Ch2\u003E\u003Cb\u003E\u003Csmall\u003EFeaturing Makers Responding to COVID-19\u003C\/small\u003E\u003C\/b\u003E\u003C\/h2\u003E\u003Ch3\u003E24 Hours of Presentations, Workshops, Demos, and Exhibits Across All Time Zones\u003C\/h3\u003E\u003Cp\u003EAcross the world, makers have responded to shortages of medical supplies and equipment with agile designs, adaptive distributed manufacturing, and community organizing. Virtually Maker Faire will be a stage to share the projects and learn from the people behind this extraordinary civic response.\u003C\/p\u003E\u003Cp\u003EVirtually Maker Faire will take place online through video sessions and an exhibit showcase on\u0026nbsp;\u003Ca href=\"https:\/\/makeprojects.com\/\" target=\"_none\"\u003EMake: Projects\u003C\/a\u003E.\u003C\/p\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/2945733289250652905\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/2945733289250652905","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2945733289250652905"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2945733289250652905"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/05\/virtually-maker-faire-may-23-2020.html","title":"Virtually Maker Faire – May 23, 2020"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-2561844553086430452"},"published":{"$t":"2020-05-19T11:52:00.000-07:00"},"updated":{"$t":"2020-05-19T11:52:02.293-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"info"}],"title":{"type":"text","$t":"Google Play - Spring 2020 Policy Updates"},"content":{"type":"html","$t":"Google Play PolicyBytes - Spring 2020 Policy Updates\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/TDF-GvnKC18\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E\nexplains the spring 2020 Play policy updates on subscriptions, background location access, malware, resource downloads, and more. Stay tuned to learn more about these updates, plus best practices for app compliance on Google Play and resources to help you understand the new updates."},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/2561844553086430452\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/2561844553086430452","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2561844553086430452"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/2561844553086430452"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/05\/google-play-spring-2020-policy-updates.html","title":"Google Play - Spring 2020 Policy Updates"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/TDF-GvnKC18\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-882499523421766778"},"published":{"$t":"2020-04-30T08:19:00.001-07:00"},"updated":{"$t":"2020-04-30T08:34:38.733-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Apps"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Raspberry Pi"}],"title":{"type":"text","$t":"Playing Samsung Galaxy Tab S6 Lite"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjAq5ldQU1KHMa-wOeaN2slAjGu04kYWMojbMxMFLMDmRDxkFswcH450RsjXOQCvO_8oZ2evsrfwp4_daQR26do2-02vcx0_QCaIEDRuSwSBAaoQMBPxJ2VlmZ8YD6ZMvUVsKcfb4dHGek\/s1600\/S6Lite-001.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"772\" data-original-width=\"1024\" height=\"482\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjAq5ldQU1KHMa-wOeaN2slAjGu04kYWMojbMxMFLMDmRDxkFswcH450RsjXOQCvO_8oZ2evsrfwp4_daQR26do2-02vcx0_QCaIEDRuSwSBAaoQMBPxJ2VlmZ8YD6ZMvUVsKcfb4dHGek\/s640\/S6Lite-001.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjI7qD2H9JKNyR9EIFsKn8NkLaxJ1auW0sUh2IHMSopi0RcYPkk8MhP0-zVeB_TGrK44FlyNjqYbYix29g7swcj2XvXzgOtaufXPBgE0XiRQpODCgUvWH2VKQ9iUaQpe2aCZcqn4yHmTg0\/s1600\/S6Lite-002.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"772\" data-original-width=\"1024\" height=\"482\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjI7qD2H9JKNyR9EIFsKn8NkLaxJ1auW0sUh2IHMSopi0RcYPkk8MhP0-zVeB_TGrK44FlyNjqYbYix29g7swcj2XvXzgOtaufXPBgE0XiRQpODCgUvWH2VKQ9iUaQpe2aCZcqn4yHmTg0\/s640\/S6Lite-002.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cb\u003E\u003Cbr \/\u003E\u003C\/b\u003E\n\u003Cb\u003E\u003Cbr \/\u003E\u003C\/b\u003E\n\u003Cb\u003ESamsung Galaxy Tab S6 Lite\u003C\/b\u003E is the newest tab from Samsung, is available to buy today, April 30, 2020. Running Android 10, Octa-Core (2.3GHz, 1.7GHz), 4G Ram, 10.4\", 2000x1200 TFT display. Come with S Pen. You can check the full-spec here (\u003Ca href=\"https:\/\/www.samsung.com\/uk\/tablets\/galaxy-tab-s6-lite\/SM-P610NZBABTU\/\" target=\"_blank\"\u003Ehttps:\/\/www.samsung.com\/uk\/tablets\/galaxy-tab-s6-lite\/SM-P610NZBABTU\/\u003C\/a\u003E). You have to choice your region\/language on the most lower-left, different region with have slightly different configuration.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiULYz91-ew5hDXygWYCX3wOQQK53Q5tjlFExdpsvqn2w7RZPAKFE_DmPDvmk6NoZFyO9KlJcKiXj1Mckdfkhq7g1y-PyS6HWe7366Ppy6kYhA9foilDNa0AAWAmNDRFIE-NAjol-FQww4\/s1600\/S6Lite+info-001.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1024\" data-original-width=\"621\" height=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiULYz91-ew5hDXygWYCX3wOQQK53Q5tjlFExdpsvqn2w7RZPAKFE_DmPDvmk6NoZFyO9KlJcKiXj1Mckdfkhq7g1y-PyS6HWe7366Ppy6kYhA9foilDNa0AAWAmNDRFIE-NAjol-FQww4\/s640\/S6Lite+info-001.jpg\" width=\"388\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcEvY5-AmDbf82D_4O7V0f7a8sxnv4QxlBeFeJeVJJ4xmwqxhKQgopmUfKJiGzYe1c3QcwAOtckLA8zFHO2_-7lcD7QC4YGng0Ej8aDpW4wco1DBu932rINEnwU0zUHPrgKT2HDVon71E\/s1600\/S6Lite+info-002.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1024\" data-original-width=\"621\" height=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcEvY5-AmDbf82D_4O7V0f7a8sxnv4QxlBeFeJeVJJ4xmwqxhKQgopmUfKJiGzYe1c3QcwAOtckLA8zFHO2_-7lcD7QC4YGng0Ej8aDpW4wco1DBu932rINEnwU0zUHPrgKT2HDVon71E\/s640\/S6Lite+info-002.jpg\" width=\"388\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nJust buy one and play:)\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003ERemote control Raspberry Pi with VNC Viewer\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.realvnc.viewer.android\" target=\"_blank\"\u003EVNC Viewer\u003C\/a\u003E turns the Tab S6 Lite (or other phones) into a remote desktop, remote control Mac, Windows and Linux computers (Raspberry Pi in my case) from anywhere in the world. You can view your computer's desktop remotely, and control its mouse and keyboard as though you were sitting down in front of it.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThis view show how Galaxy Tab S6 Lite running VNC Viewer to control Raspberry Pi Zero W. It's supposed you have already enable VNC in Raspberry Pi Configuration -\u0026gt; Interface, and install in tablet, and setup completely.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/qq5wDKraHWA\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EPlay dual Pokemon GO\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiyjhreujiyT5HV_6A9aDqC0wjKTQFV_rlZ5Hc30ryequCIxRrZMvF84mxpg-CwXfpe3w6CJ7UxQlqQQz248Dm4Oseidyvqb_oE-7Qip38k60IlEDNX1phdsq0yhRxGXXL5WQbd7yCjDT0\/s1600\/Dual+PkGO.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"720\" data-original-width=\"1280\" height=\"360\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiyjhreujiyT5HV_6A9aDqC0wjKTQFV_rlZ5Hc30ryequCIxRrZMvF84mxpg-CwXfpe3w6CJ7UxQlqQQz248Dm4Oseidyvqb_oE-7Qip38k60IlEDNX1phdsq0yhRxGXXL5WQbd7yCjDT0\/s640\/Dual+PkGO.gif\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nYes, you can install two copy of Pokemon Go from both Google Play Store and Samsung Galaxy Store, currently version 0.173.2-G and 0.173.2-S. Then you can run both Pokemon Go with different account at same time.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhMdp2Mp1yzHZiKmaqhRP6KrYATDR1LXFxz32FrWNcNoopb5BDk9zjPvGVyUle3f45bCPFICvuOaN6Q_rzlTfOdc0nJG7myYvEXGOJMZvdwyHCkK7SliVfiTISXDOsihjO9VTj3gNf4QnY\/s1600\/S6Lite+dual+PkGO-001.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"621\" data-original-width=\"1024\" height=\"388\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhMdp2Mp1yzHZiKmaqhRP6KrYATDR1LXFxz32FrWNcNoopb5BDk9zjPvGVyUle3f45bCPFICvuOaN6Q_rzlTfOdc0nJG7myYvEXGOJMZvdwyHCkK7SliVfiTISXDOsihjO9VTj3gNf4QnY\/s640\/S6Lite+dual+PkGO-001.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgVpdo3lpQNmKh6I9rBqJTF8Dvk2a87-se9THj_SYLOInnfMG8Yq4AWov2V6VHlw0rtcHqJsY0KDX5MguANI9SKUgsteVsKceMFQii8eExw9XG7a5ZU6lq2PjQC8aH6qAvVOSQ-qa3DXM4\/s1600\/S6Lite+dual+PkGO-002.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"621\" data-original-width=\"1024\" height=\"388\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgVpdo3lpQNmKh6I9rBqJTF8Dvk2a87-se9THj_SYLOInnfMG8Yq4AWov2V6VHlw0rtcHqJsY0KDX5MguANI9SKUgsteVsKceMFQii8eExw9XG7a5ZU6lq2PjQC8aH6qAvVOSQ-qa3DXM4\/s640\/S6Lite+dual+PkGO-002.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj9CGveV5Fxs3zjMPHmxPqjXGbS6-8CwEmfE6iADsHVuL28b_-iXCtfdLqGojV2qlQzDjZX98R-LH8yGW2SkDaCoikfMvfGemG_ogru4p6YfWGVmspW3BjiOHoo9IYN3LbzGBvuF14gB1w\/s1600\/S6Lite+dual+PkGO-003.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"621\" data-original-width=\"1024\" height=\"388\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj9CGveV5Fxs3zjMPHmxPqjXGbS6-8CwEmfE6iADsHVuL28b_-iXCtfdLqGojV2qlQzDjZX98R-LH8yGW2SkDaCoikfMvfGemG_ogru4p6YfWGVmspW3BjiOHoo9IYN3LbzGBvuF14gB1w\/s640\/S6Lite+dual+PkGO-003.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/882499523421766778\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/882499523421766778","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/882499523421766778"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/882499523421766778"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/04\/playing-samsung-galaxy-tab-s6-lite.html","title":"Playing Samsung Galaxy Tab S6 Lite"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjAq5ldQU1KHMa-wOeaN2slAjGu04kYWMojbMxMFLMDmRDxkFswcH450RsjXOQCvO_8oZ2evsrfwp4_daQR26do2-02vcx0_QCaIEDRuSwSBAaoQMBPxJ2VlmZ8YD6ZMvUVsKcfb4dHGek\/s72-c\/S6Lite-001.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-8580674706875160573"},"published":{"$t":"2020-04-13T12:44:00.003-07:00"},"updated":{"$t":"2020-04-13T12:44:49.772-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Studio.how to"}],"title":{"type":"text","$t":"How to display layout xml in code view, for Android Studio 3.6.2"},"content":{"type":"html","$t":"With Android Studio updated (currently 3.6.2), when you view layout xml file, the original\u0026nbsp;design\/code option (on lower-left corner) removed. So how to view its xml code?\u003Cbr \/\u003E\nAnswer: The option is now moved to upper-right corner, you can view it in Code\/Splite\/Design view.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj5nTD37jffq4RvxWISHAS3tk-2ws2FVAZAzRXrzV3dZhV4ia7q223wNua53r7wZ0sT676bp0BufkWC2I7tp_jproM-DtldZvhi3gtM03SXH0MleEgu_IlowoqdMU8ky0y1yn8DpYDxsmA\/s1600\/layout+code.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"358\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj5nTD37jffq4RvxWISHAS3tk-2ws2FVAZAzRXrzV3dZhV4ia7q223wNua53r7wZ0sT676bp0BufkWC2I7tp_jproM-DtldZvhi3gtM03SXH0MleEgu_IlowoqdMU8ky0y1yn8DpYDxsmA\/s640\/layout+code.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjEqzVNyqYBveLkjgHWjlm-kt4bFQkgJu5vlJHi-jRq7t9NheBIpm52Vda4a-7soOLu_og_3tGVFTiCNvqxAR96FVTK_RFkoE_aAOH9GHZ8vclVHYhi1hgwnGenIBdJ6k9WUYURmF2Avg8\/s1600\/layout+splite.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"358\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjEqzVNyqYBveLkjgHWjlm-kt4bFQkgJu5vlJHi-jRq7t9NheBIpm52Vda4a-7soOLu_og_3tGVFTiCNvqxAR96FVTK_RFkoE_aAOH9GHZ8vclVHYhi1hgwnGenIBdJ6k9WUYURmF2Avg8\/s640\/layout+splite.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhm36ZJ9Fc7pma9PC9xxbehxBpIyBthpCLzM2JFfFrzI1mRqfUBdVLnP-5S8QFBkaKnQe5G54ftqLTlfPclwUdgTP4TD4BTfusVDGL-esxuN1IspdRLheBLxtPs06gLVzOqtzRSKbeR0JU\/s1600\/layout+design.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"768\" data-original-width=\"1366\" height=\"358\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhm36ZJ9Fc7pma9PC9xxbehxBpIyBthpCLzM2JFfFrzI1mRqfUBdVLnP-5S8QFBkaKnQe5G54ftqLTlfPclwUdgTP4TD4BTfusVDGL-esxuN1IspdRLheBLxtPs06gLVzOqtzRSKbeR0JU\/s640\/layout+design.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/8580674706875160573\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/8580674706875160573","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8580674706875160573"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/8580674706875160573"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/04\/how-to-display-layout-xml-in-code-view.html","title":"How to display layout xml in code view, for Android Studio 3.6.2"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj5nTD37jffq4RvxWISHAS3tk-2ws2FVAZAzRXrzV3dZhV4ia7q223wNua53r7wZ0sT676bp0BufkWC2I7tp_jproM-DtldZvhi3gtM03SXH0MleEgu_IlowoqdMU8ky0y1yn8DpYDxsmA\/s72-c\/layout+code.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-5794632470423803234"},"published":{"$t":"2020-03-24T13:25:00.001-07:00"},"updated":{"$t":"2020-03-24T13:25:23.524-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Game development"}],"title":{"type":"text","$t":"What's new in Android game development tools"},"content":{"type":"html","$t":"Learn about our new development and profiling tools built specifically for Android game developers. Improve productivity with new features that allow you to build and deploy your game more efficiently, and use updated profilers to fine tune your game's performance.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/JXQBdMNDL7k\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EGoogle for Games Developer Summit Keynote\u003C\/b\u003E\u003Cbr \/\u003E\nGame Developers Conference is one of our most anticipated times of the year to connect with the gaming industry and share our latest product updates.\u003Cbr \/\u003E\n\u003Ccenter\u003E\n\u003Ciframe allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/2haNNRU1Gxs\" width=\"560\"\u003E\u003C\/iframe\u003E\n\u003C\/center\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/5794632470423803234\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/5794632470423803234","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/5794632470423803234"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/5794632470423803234"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/03\/whats-new-in-android-game-development.html","title":"What's new in Android game development tools"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/JXQBdMNDL7k\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-1872945506878509245"},"published":{"$t":"2020-01-19T13:43:00.004-08:00"},"updated":{"$t":"2020-01-19T13:43:58.302-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"x86"}],"title":{"type":"text","$t":"Android-x86 - Run Android on your PC"},"content":{"type":"html","$t":"\u003Cb\u003EAndroid-x86\u003C\/b\u003E is a project to port Android open source project to x86 platform.\u0026nbsp;This is an open source project licensed under Apache Public License 2.0. Some components are licensed under GNU General Public License (GPL) 2.0 or later.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhSxw-_Ws3guNwcj7nw7Q3VefagSdRrNpZa4m_mj_505ttUwrUfiVy5DX1RWel-Oi20KsetlKqW12RN7zk4AjPADo-K_Y_AFMBUUWDifgzB0sS1YNyZMggmq_GamWn7qY47jsKdYLKSzE8\/s1600\/Android-x86+-+Porting+Android+to+x86.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"672\" data-original-width=\"1267\" height=\"338\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhSxw-_Ws3guNwcj7nw7Q3VefagSdRrNpZa4m_mj_505ttUwrUfiVy5DX1RWel-Oi20KsetlKqW12RN7zk4AjPADo-K_Y_AFMBUUWDifgzB0sS1YNyZMggmq_GamWn7qY47jsKdYLKSzE8\/s640\/Android-x86+-+Porting+Android+to+x86.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nTo know more and try it, visit:\u0026nbsp;\u003Ca href=\"https:\/\/www.android-x86.org\/\" target=\"_blank\"\u003Ehttps:\/\/www.android-x86.org\/\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/1872945506878509245\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/1872945506878509245","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/1872945506878509245"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/1872945506878509245"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2020\/01\/android-x86-run-android-on-your-pc.html","title":"Android-x86 - Run Android on your PC"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhSxw-_Ws3guNwcj7nw7Q3VefagSdRrNpZa4m_mj_505ttUwrUfiVy5DX1RWel-Oi20KsetlKqW12RN7zk4AjPADo-K_Y_AFMBUUWDifgzB0sS1YNyZMggmq_GamWn7qY47jsKdYLKSzE8\/s72-c\/Android-x86+-+Porting+Android+to+x86.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-89878749563391212.post-628184020916429045"},"published":{"$t":"2019-12-19T12:26:00.000-08:00"},"updated":{"$t":"2019-12-19T12:26:28.867-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android Apps"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Microsoft"}],"title":{"type":"text","$t":"Link your phone and Windows PC, using Microsoft Your Phone Companion app"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhQbgJ1ZwlOQQIAOGSTnwgC0FY2uWI2hJU6Nz_GqkcBMq-SplbeojREpkghHwqD_njK-JHkbyUnz2W_pF_j-9WAD8CPdtMDYi5tJkZ4iPp9VrZ4dDe7Cdpl4uueLQRnY4B-TP8V3E3yNUM\/s1600\/Microsoft+Your+Phone.jpg\" imageanchor=\"1\" style=\"clear: right; float: right; margin-bottom: 1em; margin-left: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"394\" data-original-width=\"700\" height=\"180\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhQbgJ1ZwlOQQIAOGSTnwgC0FY2uWI2hJU6Nz_GqkcBMq-SplbeojREpkghHwqD_njK-JHkbyUnz2W_pF_j-9WAD8CPdtMDYi5tJkZ4iPp9VrZ4dDe7Cdpl4uueLQRnY4B-TP8V3E3yNUM\/s320\/Microsoft+Your+Phone.jpg\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\nWith \u003Cb\u003EYour Phone Companion\u003C\/b\u003E you can easily sync your Android phone with your Windows 10 PC. Get instant access to everything you love on your phone, right on your PC. Reply to your text messages with ease, stop emailing yourself photos, and receive your phone's notifications on your PC's bigger screen.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nYour Phone Companion features:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nConnect your phone and PC\u003Cbr \/\u003E\n• Receive and manage your Android phone's notifications on your PC\u003Cbr \/\u003E\n• Read and reply to your text messages from your PC\u003Cbr \/\u003E\n• Photos taken on your phone are instantly available on your PC\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nTo use it, install\u0026nbsp;\u003Ca href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.microsoft.appmanager\" target=\"_blank\"\u003E\u003Cb\u003E\u003Cspan style=\"color: blue; font-family: \u0026quot;trebuchet ms\u0026quot; , sans-serif;\"\u003EYour Phone Companion\u003C\/span\u003E\u003C\/b\u003E\u003C\/a\u003E app on your Android phone and\u0026nbsp;\u003Ca href=\"https:\/\/www.microsoft.com\/en-gb\/p\/your-phone\/9nmpj99vjbwv\" target=\"_blank\"\u003E\u003Cb\u003E\u003Cspan style=\"color: blue; font-family: \u0026quot;trebuchet ms\u0026quot; , sans-serif;\"\u003EYour Phone\u003C\/span\u003E\u003C\/b\u003E\u003C\/a\u003E program on your Windows PC.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/android-er.blogspot.com\/feeds\/628184020916429045\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/www.blogger.com\/comment\/fullpage\/post\/89878749563391212\/628184020916429045","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/628184020916429045"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/89878749563391212\/posts\/default\/628184020916429045"},{"rel":"alternate","type":"text/html","href":"http:\/\/android-er.blogspot.com\/2019\/12\/link-your-phone-and-windows-pc-using.html","title":"Link your phone and Windows PC, using Microsoft Your Phone Companion app"}],"author":[{"name":{"$t":"Erik"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/04983894331825656853"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhQbgJ1ZwlOQQIAOGSTnwgC0FY2uWI2hJU6Nz_GqkcBMq-SplbeojREpkghHwqD_njK-JHkbyUnz2W_pF_j-9WAD8CPdtMDYi5tJkZ4iPp9VrZ4dDe7Cdpl4uueLQRnY4B-TP8V3E3yNUM\/s72-c\/Microsoft+Your+Phone.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}}]}}