Android 5 sd-kortti vain luku. Suoritetaanko kysely rekursiivisesti valitussa kansiossa? Mihin tämä johtaa

Kun kehittelin sovellusta kilpailuun, törmäsin tietokannan tallennusongelmaan. Ongelmana oli, kuinka tunnistan ulkoisen muistikortin. Yleisesti ottaen nettihaku ei antanut tarkkaa vastausta. Siksi kokosin luokkani yhdistämällä kaikki löytämäni tulokset. Jos jotakuta kiinnostaa niin katso leikkauksen alta.

Aloitetaan siis teoriasta.

Terminologia

Google kertoo meille, että on olemassa seuraavat käsitteet:
  1. Sisäinen ( sisäinen) muisti on osa puhelimen sisäänrakennettua muistikorttia. Oletusarvoisesti sovelluskansio on suojattu muilta sovelluksilta (sisäistä tallennustilaa käyttämällä).
  2. Ulkoinen ( ulkoinen) muisti on jaettu "ulkoinen tallennustila" eli. se voi olla joko osa sisäänrakennettua muistia tai irrotettava laite. Yleensä tämä on osa sisäänrakennettua muistia, kuten näin laitteen poistuvan viime kerta Android 2.2:ssa, jossa sisäänrakennettu muisti oli noin 2 Gt ja liitetty muisti muuttui ulkoiseksi (Using External Storage).
  3. Poistettu ( irrotettava) muisti - kaikki tallennustila, joka voidaan poistaa laitteesta ilman "kirurgisia" toimenpiteitä.

Ennen KitKat 4.4:ää API ei tarjonnut toimintoja polkujen saamiseksi ulkoiseen muistiin. Tästä versiosta alkaen (API 19) on julkinen abstrakti tiedosto -toiminto getExternalFilesDirs(merkkijonotyyppi), joka palauttaa joukon merkkijonoja poluilla sisäiseen ja ulkoiseen muistiin. Mutta entä SD-korttimme, joka laitetaan korttipaikkaan? Emme voi taaskaan saada tietä siihen.

hakutuloksia

Vastatakseni kysymykseen käännyin kaikkitietävän Googlen puoleen. Mutta hän ei antanut minulle selkeää vastausta. Monia määritelmiä on harkittu standarditoimintojen käyttämisestä, jotka johtavat ulkoiseen muistiin, mutta niillä ei ole mitään tekemistä irrotettavien tallennuslaitteiden kanssa, käsittelylaitteiden liitossääntöihin (Android on Linux-ydin työssä). V viimeaikaisia ​​tapauksia Käytettiin "langallisia" polkuja kansioon, johon on asennettu laitteita (in erilaisia ​​versioita tämä hakemisto on erilainen). Älä unohda, että asennussäännöt vaihtelevat versiosta toiseen.

Lopulta päätin yhdistää kaiken hankitun tiedon ja kirjoitin oman luokan, joka voi palauttaa meille polut ulkoisille ja poistetuille laitteille.

Koodi Kuvaus

Luokka on luotu MountDevice, joka sisältää polun laitteeseen, laitetyypin ja jonkin verran tiivistettä.
Laitteita on kahdenlaisia ​​( sisäinen muisti En koskenut siihen, koska siihen pääsee järjestelmän API:n kautta).

Julkinen enum MountDeviceType (EXTERNAL_SD_CARD, REMOVABLE_SD_CARD)
Ja luokka luotiin StorageHelper, joka etsii käytettävissä olevia muistikortteja.

StorageHelper-luokka toteuttaa kaksi hakumenetelmää - järjestelmäympäristön kautta ( Ympäristö) ja käyttäminen Linux-apuohjelmat kiinnitys tai pikemminkin sen täytäntöönpanon tulos.

Tapa yksi - Ympäristö
Ympäristön kanssa työskennellessäni käytän vakiotoiminto getExternalStorageDirectory() saadaksesi tietoja ulkoisesta tallennustilasta. Käytän saadakseni tietoa poistettavasta muistista ympäristömuuttuja "TOISSIJAINEN TALLENNUSTILA".

Ulkoinen muisti on aina yksi ja yleensä aina, joten tarkistamme sen luettavuuden, laskemme hashin ja muistamme. Poistettavaa muistia voi olla paljon, joten sinun on jaettava tuloksena oleva merkkijono erottimella ja tarkistettava jokainen arvo.

fillDevicesEnvirement-toiminto

Merkkijonopolku = android.os.Environment.getExternalStorageDirectory() .getAbsolutePath(); if (!path.trim().isEmpty() && android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) ( testAndAdd(polku, MountDeviceType.EXTERNAL_SD_CARD); ) // Get String Remover rawSecondaryStoragesStr = System.getenv("TOISTO_TALLENNUS"); if (rawSecondaryStoragesStr != null && !rawSecondaryStoragesStr.isEmpty()) ( // Kaikki toissijaiset SD-KORTTIT jaettu taulukon lopulliseen merkkijonoon rawSecondaryStorages = rawSecondaryStoragesStr .split(File.pathSparageSrawdSadcondcondw) MountDeviceType.REMOVABLE_SD_CARD); ) )


Liuos otettu stackoverflowsta. Vastaus on jossain alhaalla.
Tapa kaksi - kiinnitys
Koska en pitkään aikaan saanut järjestelmää kertomaan polkua poistettavaan muistiin, päätin katsoa asennettujen laitteiden suuntaan. Järjestelmässä on asetustiedostoja, jotka kuvaavat liitossäännöt ulkoisia laitteita. Kaikki olisi hyvin, mutta Android-versiossa 4.* pelkät kuolevaiset eivät pääse käsiksi tähän tiedostoon, joten en harkitse tätä menetelmää.

Palataan mount-apuohjelmaan. Kun komento suoritetaan ilman parametreja, se palauttaa luettelon liitetyistä tiedostojärjestelmistä. Poistetuilla laitteilla on yleensä muoto tiedostojärjestelmä FAT, valitsemme rivit, joilla on ominaisuus " rasvaa". Ulkoista muistia luonnehditaan parametrilla " sulake".

Huomaa: tätä menetelmää käytettäessä ei aina ole oikein (todennäköisesti en ottanut jotain huomioon) asennettujen laitteiden tyypit määritetään. Huomasi eron eri versioita Android. Siksi tätä menetelmää voidaan käyttää lisämenetelmänä.

fillDevicesProcess-toiminto

yrittää( Ajonaikainen suoritusaika= Runtime.getRuntime(); proc = runtime.exec("mount"); try ( is = proc.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); while ((line = br.readLine()) != null) ( if (line.contains("secure) ")) jatka; if (line.contains("asec")) jatka; if (line.contains("rasva")) (// TF-kortti Merkkijono sarakkeet = line.split(" "); if (sarakkeet != null && columns.length > 1) ( testAndAdd(columns, MountDeviceType.REMOVABLE_SD_CARD); ) ) else if (line.contains("sulake")) (// sisäinen(ulkoinen) // tallennusmerkkijono sarakkeet = line.split(" "); if (sarakkeet != null && columns.length > 1) ( // mount = mount.concat(columns + "\n"); testAndAdd(columns, MountDeviceType.EXTERNAL_SD_CARD); ) ) ) ) lopulta ( .. . ) ) saalis (poikkeus e) ( ... )

Lähde koko luokka sijaitsee, mutta ei missään. Yritän julkaista sen githubissa lähipäivinä.

Kuka muu sitä käyttää?

Tunnisteet:

  • Android
  • Androidin kehitys
  • Sd-kortti
Lisää tageja

Ongelma

Viesti ohjaa sinut vierailemaan kahdella verkkosivustolla:

Tämä näyttää sisäiseltä esimerkiltä (ehkä näkyy myöhemmin API-demoissa), mutta on melko vaikea ymmärtää, mitä tapahtuu.

Tämä on uuden API:n virallinen dokumentaatio, mutta se ei sisällä tarpeeksi tietoa sen käytöstä.

Tässä on mitä hän kertoo sinulle:

Jos todella tarvitset täysi pääsy koko asiakirjan alipuuhun, aloita suorittamalla ACTION_OPEN_DOCUMENT_TREE, jotta käyttäjä voi valita hakemiston. Välitä sitten saatu getData() tiedostoon fromTreeUri(Context, Uri) aloittaaksesi työskentelyn käyttäjän valitseman puun kanssa.

Kun navigoit DocumentFile-esiintymien puussa, voit aina käyttää getUri()-komentoa saadaksesi Urin, joka edustaa kyseisen objektin taustalla olevaa asiakirjaa käytettäväksi openInputStream(Uri) jne. kanssa.

Voit yksinkertaistaa koodia laitteissa, joissa on KITKAT tai vanhempi, käyttämällä fromFile(File), joka emuloi DocumentProviderin toimintaa.

Kysymyksiä

Minulla on muutama kysymys uudesta API:sta:

2 vastausta

Joukko hyviä kysymyksiä Kerro minulle. :)

Miten käytät sitä?

Tässä on loistava opetusohjelma vuorovaikutukseen KitKatin tallennustilan käyttökehyksen kanssa:

Vuorovaikutus uudet API:t hyvin samanlainen Lollipopissa. Jos haluat pyytää käyttäjää valitsemaan hakemistopuun, voit suorittaa tällaisen tarkoituksen seuraavasti:

Tarkoitustarkoitus = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); aloitaActivityForResult(intent, 42);

Sitten onActivityResult()-kohdassa voit välittää käyttäjän valitseman Urin uuteen DocumentFile-apuluokkaan. Tässä on lyhyt esimerkki, joka luettelee valitun hakemiston tiedostot ja luo sitten uuden tiedoston:

Public void onActivityResult(int requestCode, int tulosKoodi, Intent resultData) ( if (tuloskoodi == TULOS_OK) ( Uri treeUri = resultData.getData(); DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri); // Listaa kaikki sisällä olevat tiedostot valittu hakemisto (asiakirja Tiedostotiedosto: pickedDir.listFiles()) ( Log.d(TAG, "Löytyi tiedosto " + file.getName() + " jonka koko on " + file.length()); ) // Luo uusi tiedosto ja kirjoita siihen DocumentFile newFile = pickedDir.createFile("teksti/tavallinen", "Oma romaani"); OutputStream out = getContentResolver().openOutputStream(newFile.getUri()); out.write("Kauan sitten...".getBytes()); out.close(); ) )

Jos haluat käyttää tätä Uria omasta koodistasi, voit kutsua ContentResolver.openFileDescriptor() ja sitten käyttää ParcelFileDescriptor.getFd() tai detachFd() saadaksesi perinteisen POSIX-kokonaislukutiedostokuvaajan.

Kuinka voit tarkistaa tiedostojen/kansioiden käyttöoikeuden?

Oletus Uris palasi kanssa tallennusominaisuudet Access Framework ei kestä uudelleenkäynnistyksen aikana. Alusta "tarjoaa" mahdollisuuden tallentaa lupa, mutta sinun täytyy silti "ottaa" lupa, jos haluat. Yllä olevassa esimerkissämme soitat:

GetContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

ContentResolver.getPersistedUriPermissions() API:n kautta voit aina selvittää, mitä pysyviä avustuksia hakemuksellesi on saatavilla. Jos et enää tarvitse pääsyä tallennettuun Uriin, voit vapauttaa sen komennolla ContentResolver.releasePersistableUriPermission() .

Onko se saatavilla KitKatissa?

Ei, emme voi lisätä takautuvasti uusia ominaisuuksia alustan vanhempiin versioihin.

Voinko nähdä, millä sovelluksilla on pääsy tiedostoihin/kansioihin?

Tällä hetkellä ei käyttöliittymä joka näyttää tämän, mutta löydät tiedot adb shell dumpsys -toimintotarjoajien tulosteen Granted Permissions Uri -osiosta.

Mitä tapahtuu, jos sovellus asennetaan useille käyttäjille samalle laitteelle?

Uri-resoluutiooikeudet on eristetty käyttäjäkohtaisesti, kuten kaikki muutkin usean käyttäjän alustan ominaisuudet. Eli sama sovellus, joka toimii kahden alla eri käyttäjiä, ei ole määrätty tai jaettu Uri-käyttöoikeuksia.

Voidaanko luvat peruuttaa?

DocumentProvider-rutiini voi peruuttaa luvan milloin tahansa, esimerkiksi silloin, kun pilviasiakirja. Yleisin tapa nämä peruutetut käyttöoikeudet havaitaan, kun ne katoavat yllä mainitusta ContentResolver.getPersistedUriPermissions()-tiedostosta.

Luvat peruutetaan myös aina, kun minkä tahansa apurahaan osallistuvan hakemuksen hakemustiedot tyhjennetään.

Suoritetaanko kysely rekursiivisesti valitussa kansiossa?

Kyllä, ACTION_OPEN_DOCUMENT_TREE tarkoitus antaa sinulle rekursiivisen pääsyn olemassa oleviin ja uusiin tiedostoihin ja hakemistoihin.

Tarjoaako se useita vaihtoehtoja?

Kyllä, KitKat tukee useampaa valintaa, ja voit ottaa sen käyttöön asettamalla EXTRA_ALLOW_MULTIPLE, kun käynnistät tavoitteesi ACTION_OPEN_DOCUMENT. Voit käyttää Intent.setType()- tai EXTRA_MIME_TYPES-komentoa rajataksesi valittavia tiedostotyyppejä:

Onko emulaattorilla tapa kokeilla uutta APIa?

Kyllä, ensisijaisen tallennuslaitteen täytyy näkyä rakentajassa, jopa emulaattorissa. Jos sovelluksesi käyttää tallennustilan käyttöoikeuskehystä jaetun tallennustilan käyttöön, et enää tarvitse READ/WRITE_EXTERNAL_STORAGE-oikeuksia ja voit poistaa ne tai käyttää android:maxSdkVersion-toimintoa pyytääksesi niitä vain kehyksen aiemmissa versioissa.

Mitä tapahtuu, kun käyttäjä vaihtaa SD-kortin toiseen?

Kun fyysinen media on mukana, UUID (esim sarjanumero ensisijaisen median FAT) kirjoitetaan aina palautettuun Uriin. Järjestelmä käyttää tätä yhteyden muodostamiseen käyttäjän valitsemaan mediaan, vaikka käyttäjä vaihtaisi mediaa useiden paikkojen välillä.

Jos käyttäjä vaihtuu toisella kortilla, sinun on pyydettävä käyttöoikeutta uusi kartta. Koska järjestelmä muistaa UUID-tunnuksen perusteella myönnetyt luvat, sinulla on edelleen aiemmin myönnetty pääsy alkuperäiseen korttiin, jos käyttäjä asettaa sen myöhemmin uudelleen.

Alla olevasta Android-projektistani Githubissa löydät toimivan koodin, jonka avulla voit kirjoittaa extSdCard-kortille Android 5:ssä. Käyttäjän on tarkoitus antaa pääsy koko SD-kortille ja antaa sinun sitten kirjoittaa kaikkialle kyseiselle kortille. (Jos haluat käyttää vain yksittäisiä tiedostoja, asiat helpottuvat.)

Pääkoodin katkelmia

Tallennuskäyttöalustan käynnistäminen:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) yksityinen void triggerStorageAccessFramework() ( Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(intent, REQUEST_CODE_STORAGE_ACCESS);

Vastauksen käsittely tallennusalustalta:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public final void onActivityResult(lopullinen int requestCode, final int resultCode, final Intent tulosData) ( if (requestCode == SettingsFragment.REQUEST_CODE_STORAGE_ACCESS) ( Uri puu =Coreriivity Act = null .RESULT_OK) ( // Hanki Uri Storage Access Frameworkista. treeUri = resultData. getData(); // Säilytä URI jaetussa asetuksessa, jotta sinä pystyt käytä sitä myöhemmin. // Käytä tässä omaa kehystä PreferenceUtilin sijaan. PreferenceUtil.setSharedPreferenceUri(R.string.key_internal_uri_extsdcard, treeUri); // Säilytä käyttöoikeudet. final int takeFlags = resultData.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); getActivity().getContentResolver().takePersistableUriPermission(treeUri, takeFlags); ) ) )

Tiedoston tulostevirran hakeminen tallennusalustan kautta (käyttäen tallennettua URL-osoitetta, olettaen, että se on ulkoisen SD-kortin juurikansion URL-osoite)

DocumentFile targetDocument = getDocumentFile(tiedosto, false); OutputStream outStream = Application.getAppContext(). getContentResolver().openOutputStream(targetDocument.getUri());

Käytetään seuraavia apumenetelmiä:

Julkinen staattinen asiakirjatiedosto getDocumentFile(lopullinen tiedosto, lopullinen boolean isDirectory) ( Merkkijono baseFolder = getExtSdCardFolder(file); if (baseFolder == null) ( return null; ) Merkkijono suhteellinenPath = nolla; kokeile ( Merkkijono fullPath = file.getCanonicalPath(); suhteellisenPath = fullPath.substring(baseFolder.length() + 1); ) catch (IOException e) (paluu nolla; ) Uri treeUri = PreferenceUtil.getSharedPreferenceUri(R.string.key_internal_uri_extsdcard); if (treeUri == null) ; ) // aloita SD-kortin juuresta ja jäsennä sitten asiakirjapuun läpi DocumentFile document = DocumentFile.fromTreeUri(Application.getAppContext(), treeUri); Merkkijonoosat = viszonylagPath.split("\\/"); for (int i = 0 i< parts.length; i++) { DocumentFile nextDocument = document.findFile(parts[i]); if (nextDocument == null) { if ((i < parts.length - 1) || isDirectory) { nextDocument = document.createDirectory(parts[i]); } else { nextDocument = document.createFile("image", parts[i]); } } document = nextDocument; } return document; } public static String getExtSdCardFolder(final File file) { String extSdPaths = getExtSdCardPaths(); try { for (int i = 0; i < extSdPaths.length; i++) { if (file.getCanonicalPath().startsWith(extSdPaths[i])) { return extSdPaths[i]; } } } catch (IOException e) { return null; } return null; } /** * Get a list of external SD card paths. (Kitkat or higher.) * * @return A list of external SD card paths. */ @TargetApi(Build.VERSION_CODES.KITKAT) private static String getExtSdCardPaths() { Listpolut = uusi ArrayList<>(); for (Tiedostotiedosto: Application.getAppContext().getExternalFilesDirs("external")) ( if (file != null && !file.equals(Application.getAppContext().getExternalFilesDir("external"))) ( int index = tiedosto .getAbsolutePath().lastIndexOf("/Android/data"); if (indeksi< 0) { Log.w(Application.TAG, "Unexpected external file dir: " + file.getAbsolutePath()); } else { String path = file.getAbsolutePath().substring(0, index); try { path = new File(path).getCanonicalPath(); } catch (IOException e) { // Keep non-canonical path. } paths.add(path); } } } return paths.toArray(new String); } /** * Retrieve the application context. * * @palauttaa(staattisesti tallennettu) sovelluskonteksti */ julkinen staattinen konteksti getAppContext() ( paluu Application.mApplication.getApplicationContext(); )

Puhutaanpa kirjoitussuojauksen poistamisesta SD-muistikortilta Androidissa. Monet ihmiset kohtaavat tämän ongelman yrittäessään kopioida tai siirtää tiedostoja SD-kortille. Tästä artikkelista löydät useita tapoja poistaa suojaus Android-merkinnät.

Kuinka poistaa kirjoitussuojaus Android SD-kortilta

Jos saat yllä olevassa kuvassa olevan virheen, kun yrität kopioida tiedostoja tai alustaa SD-korttia, tiedä, että tämä ei ole sinun ongelmasi. Lisäksi muistikortti ei ole vioittunut tai viruksen saastuttama, siinä on vain kirjoitussuojaus. Tarkastellaan ilman pitkiä puheita muutamia menetelmiä Androidin kirjoitussuojauksen poistamiseksi.

Kuinka poistaa Android-kirjoitussuojaus SD-kortilta Regeditin avulla

Useimmat ongelmat ja virheet ratkaistaan ​​helposti rekisterin avulla. Voimme käyttää sitä myös Android-kirjoitussuojauksen poistamiseen.


Tämä menetelmä auttaa useimmissa tapauksissa, mutta jos et jostain syystä voi käyttää sitä, kokeile seuraavia menetelmiä.

Kuinka poistaa Android-kirjoitussuojaus SD-kortilta Diskpartin avulla

  1. Aseta SD-muistikortti tietokoneeseen ja suorita komentokehote. Voit tehdä tämän painamalla WIN+R-näppäintä ja kirjoittamalla "CMD" tai yksinkertaisesti kirjoittamalla "Command Prompt" Käynnistä-valikkoon.
  2. Ikkunassa komentorivi sinun on syötettävä seuraavat komennot järjestyksessä.

  • levyosa
  • listalevy
  • valitse levy x (jossa X on SD-korttisi numero)
  • attribuutit levyn tyhjennys vain luku -tilassa
  • puhdas
  • luo ensisijainen osio
  • muoto fs=fat32

Jos tämä menetelmä ei auttanut poistamaan Androidin kirjoitussuojausta, älä masennu, meillä on vielä muutama ratkaisu tähän ongelmaan.

Muuta resoluutiota

  1. Aseta SD-muistikortti tietokoneeseen. Klikkaus oikealla painikkeella napsauta muistikorttia ja valitse Ominaisuudet. Sitten Suojaus-välilehdeltä löydät tilisi nimen.
  2. Muuta SD-kortin lupaksi luku/kirjoitus, luku/suoritus tai täysi hallinta.

Tämä menetelmä poistaa Androidin kirjoitussuojauksen.

Vaihtoehtoisesti voit katsoa tarkasti SD-korttiasi löytääksesi lukituspainikkeen. Jos on, vaihda se. Lukituspainiketta käytetään suojaamaan tietoja poistamiselta tai täysi muotoilu muistikortit.

Toivomme, että onnistuit poistamaan Androidin kirjoitussuojauksen. Jos sinulla on kysyttävää, kirjoita alla oleviin kommentteihin.

Päivityksen myötä käyttäjät saivat useita rajoituksia SD-korttien käyttöön. Viime aikoihin asti tämä ongelma voitiin ratkaista mukautetun laiteohjelmiston tai palautuksen avulla varhainen versio OS. Nyt voidaan palata entisiin mahdollisuuksiin Android 4.4 KitKat. Lue, kuinka tämä tehdään.

Ensinnäkin sinun tulee rootata omasi Android laitteet. Toinen tärkeä ehto on hakemus SDFix. Lataa sovellus päälle Android voit tehdä sen ilmaiseksi suoraan osoitteesta . Voit tehdä tämän käyttämällä alla olevaa linkkiä.

Asettamalla SDFix sinun Android, palautat entiset mahdollisuudet muutamalla napautuksella. Sovelluksen periaate on se SDFix lisää Android UNIX -ryhmään "media_rw". WRITE_EXTERNAL_STORAGE, jota käytetään näin ollen Android 4.4 KitKat XML tiedosto muutetaan muotoon platform.xml. Tämä luo varmuuskopio alkuasennus platform.xml.original-pre-sdfix, jota voidaan käyttää rajoitusten palauttamiseen. Järjestelmän palauttamiseksi varastossa olevaan tilaan sinun on käytettävä Exploreria pääkäyttäjän oikeuksin ja korvattava platform.xml:llä platform.xml.original-pre-sdfix.

Erikseen on huomattava, että SD:tä käyttävät sovellukset saavat enemmän matala taso turvallisuus. Tärkeää on myös se tosiasia SDFix johtaa pysyviin muutoksiin, mikä tarkoittaa, että kun vanhat käyttöoikeudet on palautettu, sovellus voidaan poistaa.

Se on tehty! Tabletissa, nimittäin Asusissa Muistio 7, jonka korvasin rehellisellä kovalla työntekijälläni, saapui päivitys Android 5.0.1:een. Nyt minulla on laite Lollipopilla tai, kuten Internetissä sanotaan, Lolipopilla.

Päivitys saapui hieman yllättäen. Ollakseni rehellinen, odotin huhtikuussa uusi laiteohjelmisto soittaa ( Asus Zenfone 5) - hän, kirjoittaja vähintään, lupasi. Kukaan ei sanonut mitään tabletista, ja tässä - ota se ja allekirjoita se.

Tämä itse asiassa masensi minua (hyvällä tavalla tietysti), myös siksi, että ostin tabletin joulukuussa, ja sen versio oli 4.3. Eli tämä on käyttöjärjestelmän toinen merkittävä päivitys (itse asiassa päivityksiä oli enemmän, mutta määrä Android-versiot ei muuttunut). Laitteeni edellinen valmistaja - Samsung - ei voinut ylpeillä sellaisella tulinopeudella, vaikka se myös päivitti käyttöjärjestelmän kahdesti: Android 3.2:sta Android 4.1.2:een (4.0.1:een). Vain täällä piti odottaa näitä uusia versioita paljon kauemmin.

No, eläköön yllätykset! Saatuani ilmoituksen uuden laiteohjelmistoversion julkaisemisesta, latasin sen heti, ja tämä on yli 700 metriä, ja käynnistin päivityksen. Koska en ladannut kotiverkon, vaan mobiiliverkon kautta, kesti kaikessa hieman enemmän aikaa: latauksen alkamisesta päivityksen valmistumiseen kului noin tunti. Itse päivitys kesti noin kaksikymmentä minuuttia, mutta mahdollisesti se voi kestää kauemmin - koska käyttöjärjestelmän asennuksen jälkeen päivitysprosessi seuraa asennetut ohjelmat. Laskurini oli 205. Mutta nyt prosessi on ohi ja on aika nähdä, mikä on muuttunut.

Ensimmäinen asia, joka pisti silmään - hienostuneempi grafiikka laitetta avattaessa. Toinen on käsi ilmoitusalueella. Kestin häntä pari päivää toivoen, että näkisin sattumalta jossain jotain häneen liittyvää. Ei nähnyt. Sitten aloin etsiä määrätietoisesti ja löysin sille selityksen osoitteessa w3bsit3-dns.com. Osoittautuu, että ilmoitukset on jaettu tärkeisiin ja vähemmän tärkeisiin, ja on mahdollista määrittää, mitä ilmoituksia haluat vastaanottaa. Jos asetat vaihtoehdon Ilmoita aina , sitten käsi katoaa, jos vaihtoehto Vain tärkeät hälytykset , sitten käsi tulee näkyviin. Ollakseni rehellinen, irrotin käteni useita kertoja, mutta jostain syystä se palaa tasaisesti. Miksi? En tiedä vielä.

Tässä on itse asiassa menettely tämän käden "poistamiseksi":

Yllä oleva menetelmä ei ole ollenkaan monimutkainen. Mutta voit saavuttaa tuloksen entistä nopeammin ja helpommin: paina yhtä kahdesta äänenvoimakkuuden säätöpainikkeesta - näytölle tulee ikkuna, jonka avulla voit muuttaa äänenvoimakkuutta erilaisia ​​komponentteja järjestelmiä sekä huomioi, hallitse Varoitustilat . Totta, jostain syystä nämä samat Varoitustilat lähtö sellaisessa nopea vaihtoehto ei aina. En ole vielä löytänyt malleja, mutta rehellisesti sanottuna se ei haitannut, ja etsin.

En löytänyt virallisia Android-päivityksiä (alueellemme) virallisilla sivustoilla.

Löysin foorumeilta tietoa, että Google julkaisi laiteohjelmistoversion Venäjälle tammikuussa 2015. Mutta sen käyttöönotto asiakaslaitteissa on erittäin hidasta.

Tällä tavalla voin odottaa, kunnes laitteeni vastaanottaa viestin ohjelmistopäivityksestä. Sen jälkeen voin päivittää Androidin.