Uppdatering på Android Lollipop och funktioner för att arbeta med ett externt minneskort. Avskydda microSD via mobilenhet


Jag köpte en ny Samsung Galaxy S5-telefon och fick omedelbart problem i Android-operativsystemet. Mer exakt, versioner av Android 4.4 KitKat. I denna version av Android har en ny funktion från Google-utvecklare introducerats.

Nu nekas applikationer tillgång till redigering av filer på SD-kortet!Detta leder till att vissa applikationer inte fungerar!

Jag ska berätta för dig hur du kan komma runt det här problemet!

God eftermiddag, kära läsare av vår blogg!

Förra dagen köpte jag mig en ny telefon! Samsung Galaxy S5!

VÄNLIG MED EN NY TELEFON

Grattis till ett framgångsrikt köp, som jag drömt om i flera år! Telefonen visade sig vara anmärkningsvärt snabb, kraftfull, vacker och bekväm!

Tidigare hade jag redan en HTC-telefon (han är redan cirka 4-5 år) med ett Android-system. En av de första telefonerna med ett sådant system (vid köpet). Jag studerade det långt och bredde, blinkade systemet flera gånger, valde Android-firmware, vilket var mycket mer funktionellt än den officiella den då.

För dem som inte känner till är blinkning en ersättning för telefonens operativsystem. Nåväl, som att installera om Windows på en dator.

Mycket tid gick, många versioner av Android kom ut (vid köpet hade jag Android 2.2). De nya versionerna och telefonerna på vilka de var installerade överträffar långt min gamla smartphone. Därför blev jag mycket förvånad över kraften, hastigheten och funktionaliteten.

Jag har haft ungefär fyra dagar. Sedan stötte på ett problem!

PROBLEM! Filsystem förbjuder filredigering!

Efter nästa uppdatering uppdaterades telefonens operativsystem till version Android 4.4

Föreställ mig min överraskning när jag inte kunde redigera en enda fil på min egen telefon! Först syndade jag på fel, checkade in olika mappar, försökte redigera filen från datorn (genom att ansluta kabeln till telefonen). Inget sätt att redigera filer!

Efter att ha tittat på operativsysteminformationen i Inställningar - Om enhet - Status SE för Android såg jag ordet Tvingande.

Detta kodord Google betyder versionen av Android, där kärnnivån i operativsystemets applikationsrättigheter är begränsade! Emae! Jag har det!

Jag vände mig till Internet för en lösning

Här är vad jag upptäckte:

X jag vill notera att min telefon är helt ny med 5 års garanti från tillverkaren!

Om du får root-åtkomst (administratörsrättigheter i Android-systemet) försvinner garantin från tillverkaren (Samsung). I själva verket hävdar vissa hackingwebbplatser att det finns speciella metoder för att återställa fabriksräknaren till sin ursprungliga position. Fabriksräknaren när du får root-åtkomst återställs. Detta visar serviceföretaget att telefonen hackades och garantin gäller inte för den.

För att påverka denna räknare måste du ta isär telefonen och komma in i mikrokretsen. Därför fall inte för sådana bedrägerier!

Om du får root-åtkomst försvinner din garanti! Testat på din gamla telefon!


I den nya versionen av Android 5.0 använder Google en annan logik för förbudet mot åtkomst till externa SD-minneskort.

1. Hur fungerar den nya logiken?

Program installeras i systemet i kompilerad form.   Det vill säga i en form som är klar för lansering. Detta ökar hastigheten, multitasking och minskar batteriförbrukningen.

Med andra ord, tidigare hade systemet distribueringsfiler (installationsfiler) och systemet, när programmet startades, kompilerade det innan det startades. Med andra ord, filerna packades, under lanseringen av applikationen packades filerna upp och startades.

Nu, i Android 5.0, installeras alla applikationer i en sammanställd, ompackad form. Detta leder till att applikationer förbrukar mer utrymme, men snabbare att utföra!

2. Vad leder detta till?

  1. Åtkomsträttigheter tilldelas applikationen vid INSTALLATION!
  2. Användaren har rätt att ställa in rättigheterna för en viss applikation under installationen.
  3. Användaren kan ändra programmets rättigheter. Om du till exempel litar på ett program kan du tillåta det att redigera filer på ett externt minneskort.

Jag vill UPPDATERA ANDROID TILL VERSION 5.0 för att lösa problemet!

Om jag uppdaterar den OFFICIELLA versionen av operativsystemet kommer jag att spara garantin!

Men jag behöver en Android-version för Ryssland (bara för henne och inte för ett annat land), för att inte drabbas av engelska ord i gränssnittet.

Jag ska försöka hitta henne.

Det officiella Kies-telefonsupportprogrammet för Samsung säger att min telefon har uppdaterats till den senaste versionen av Po.

Jag hittade inte officiella Android-uppdateringar (för vår region) på officiella webbplatser.

På forumen hittade jag information om att Google släppte en firmwareversion för Ryssland i januari 2015. Men den implementeras mycket långsamt på klientenheter.

Således kan jag vänta tills jag får ett meddelande på min enhet som det finns en uppdatering till. Efter det kan jag uppdatera Android.

Du kan, utan att vänta på en inbjudan, själv blinka på en ny firmware.

ARBETE Ett sätt att redigera filer (med hjälp av en dator) på en telefon med Android 4.4-versionen av Enforcing.

Efter att jag bestämde mig för att vänta på den officiella uppdateringen, började jag röra igenom filsystemet på telefonen. Och upptäckte en konstig:

  1. Det finns rättigheter att redigera mappar - flytta, byta namn på!
  2. Du kan ta bort filer, flytta till andra mappar (som kopior)
  3. Inga behörigheter att redigera filer!

Och jag kom genast på ett fungerande sätt att ändra filen med en mellanliggande kopia! Systemanalys i aktion ...

Det är vad vi gör:

  1. Öppna filen för redigering
  2. Vi sparar den på datorn (på telefonen låter du inte spara en kopia!)
  3. ta bort filen från telefonen
  4. skriv om kopian till platsen för den raderade filen!

På så sätt får vi den modifierade filen (med en mellanliggande kopia)!

Det här är saker, kamrater!

Det kommer att finnas nyheter, jag kommer att avsluta prenumerationen omedelbart!

Och nu, vi ses snart!

Låt oss prata om hur du tar bort skrivskydd från ett SD-minneskort på Android. Många möter detta problem när de försöker kopiera eller flytta filer till ett SD-kort. I den här artikeln hittar du flera sätt att ta bort Android-skrivskydd.

Hur man tar bort skrivskydd från Android SD-kort

Om du får ett fel när du försöker kopiera filer eller formatera SD-kortet, som på bilden ovan, ska du vara medveten om att detta inte är ditt problem. Dessutom är minneskortet inte skadat eller infekterat av ett virus, det har bara skrivskydd. Utan mycket förtjänst kommer vi att titta på några metoder för att ta bort Android-skrivskydd.

Hur tar man bort Android-skrivskydd från ett SD-kort med Regedit

De flesta problem och fel kan enkelt lösas med registret. Vi kan också använda den för att ta bort Android-skrivskydd.


Den här metoden hjälper i de flesta fall, men om du av någon anledning inte kan använda den, kan du prova följande metoder.

Hur man tar bort Android-skrivskydd från ett SD-kort med Diskpart

  1. Sätt i SD-minneskortet i datorn och kör kommandotolken. Du kan göra detta genom att trycka på WIN + R-tangenten och skriva "CMD", eller helt enkelt skriva "Kommandotolken" på Start-menyn.
  2. Vid kommandotolken ska du ange följande kommandon i ordning.

  • diskpart
  • listdisk
  • välj disk x (där X är numret på ditt SD-kort)
  • tillskriver disk tydligt
  • ren
  • skapa partition primär
  • format fs \u003d fat32

Om den här metoden inte heller hjälpte till att ta bort Android-skrivskydd, förtvivlan, vi har fortfarande ett par lösningar på det här problemet.

Ändra upplösning

  1. Sätt i SD-minneskortet i datorn. Högerklicka på minneskortet och välj Egenskaper. Sedan hittar du namnet på ditt konto på fliken Säkerhet.
  2. Ändra upplösningen för SD-kortet till Läs / Skriv, Läs / Kör eller Full kontroll.

Den här metoden tar bort skrivskyddet för Android.

Dessutom kan du titta noga på ditt SD-kort för att hitta låsknappen. Om det är det, byt bara det. Låsknappen används för att skydda data från att radera eller formatera minneskortet helt.

Vi hoppas att du kunde ta bort Android-skrivskydd. Om du fortfarande har frågor, skriv i kommentarerna nedan.

Det hände! En uppdatering till Android 5.0.1 flög till surfplattan, nämligen Asus MeMO Pad 7, som jag ersätter med min ärliga hårda arbetare. Nu har jag en enhet med Lollipop, eller som de säger på Internet, med Lolipopa.

En uppdatering flög något oväntat. För att vara ärlig, i april väntade jag på en ny firmware på min telefon (Asus ZenFone 5) - åtminstone lovade de det. Ingen sa någonting om surfplattan, och här - på dig, få den och underteckna den.

Det faktum avskräckte mig (naturligtvis i en god mening), också för att jag köpte surfplattan i december, och den hade version 4.3 på den. Det vill säga, det här är den andra betydande uppdateringen av operativsystemet (det fanns faktiskt fler uppdateringar, men Android-versionens nummer ändrades inte). Den tidigare tillverkaren av mina enheter - Samsung - kunde inte skryta med en sådan brandhastighet, även om den också uppdaterade operativsystemet två gånger: från Android 3.2 till Android 4.1.2 (till och med 4.0.1). Först nu tog det mycket längre tid att vänta på dessa nya versioner.

Tja, länge lever överraskningarna! Efter att ha fått ett meddelande om frisläppandet av en ny version av firmware laddade jag genast ner den, som är mer än 700 meter, och startade uppdateringen. Eftersom jag laddade ner inte via hemnätverket, utan via mobilnätet, tog det lite mer tid för allt om allt: ungefär en timme gick från början av nedladdningen till slutförandet av uppdateringen. Själva uppdateringen varade i cirka tjugo minuter, men det kan eventuellt ta längre tid, eftersom processen för uppdatering av de installerade programmen följer efter installationen av operativsystemet. Jag räknade räknaren till 205. Men nu är processen avslutad och det är dags att se vad som har förändrats.

Det första som fick mitt öga var en mer sofistikerad grafik när jag låste upp enheten. Den andra är handen i anmälningsområdet. Jag tog upp henne med ett par dagar och hoppades att jag av någon slump skulle se något relaterat till henne. Jag såg det inte. Sedan började jag söka målmedvetet och hittade en förklaring på det på w3bsit3-dns.com. Det visar sig att varningarna har delats upp i viktiga och inte så viktiga, och det finns en möjlighet att specificera vilka varningar du vill ta emot. Om du ställer in ett alternativ Meddela alltid , försvinner sedan handen om alternativet Endast viktiga varningar då visas handen. För att vara ärlig tog jag bort min hand flera gånger, men av någon anledning återkommer den stadigt. Varför? Jag vet inte ännu.

Här är faktiskt förfarandet för att "ta bort" den här handen:

Metoden som anges ovan är inte alls komplicerad. Men du kan uppnå resultatet ännu snabbare och enklare: tryck på en av de två volymkontrollknapparna - ett fönster kommer att visas på skärmen som låter dig ändra volymnivåerna för olika komponenter i systemet, såväl som, kontroll Varningslägen . Det är riktigt, av någon anledning, samma Varningslägen   visas inte alltid i en så snabb version. Jag har ännu inte hittat mönster, men för att vara ärlig var det inte smärtsamt, jag letade efter det.

Jag hittade inte officiella Android-uppdateringar (för vår region) på officiella webbplatser.

På forumen hittade jag information om att Google släppte en firmwareversion för Ryssland i januari 2015. Men den implementeras mycket långsamt på klientenheter.

Således kan jag vänta tills jag får ett meddelande på min enhet som det finns en uppdatering till. Efter det kan jag uppdatera Android.

Med uppgraderingen till användarna fick ett antal begränsningar för användning av SD-kort. Fram till nyligen var det möjligt att lösa detta problem med anpassad firmware eller rollback till en tidigare version av OS. Nu kan gamla möjligheter återlämnas till Android 4.4 KitKat. Läs mer om hur du gör detta.

Först och främst måste du få root-privilegier för dina Android   anordning. Det andra viktiga villkoret är applikationen. SDFix. Ladda ner appen på android   Gratis kan vara direkt från. För att göra detta, använd länken nedan.

Genom att ställa in SDFix   på din Android, återställer du tidigare möjligheter på några tapas. Principen för ansökan är att SDFix   lägger till Android UNIX-gruppen "media_rw" till WRITE_EXTERNAL_STORAGEalltså används i Android 4.4 KitKat XMLfilen ändras till platform.xml. Detta säkerhetskopierar den första installationen. platform.xml.original-pre-SDFixsom kan användas för att återställa begränsningar. För att återställa systemet till aktietillståndet måste du använda utforskaren med root access support och ersätta platform.xml med platform.xml.original-pre-sdfix.

Separat bör det noteras att applikationer som använder SD kommer att få en lägre säkerhetsnivå. Det är också viktigt att SDFix leder till permanenta förändringar, vilket innebär att efter återställning av gamla behörigheter kan applikationen raderas.

Problemet

Ett meddelande vägleder dig att besöka två webbplatser:

Det ser ut som ett internt exempel (det kommer förmodligen att visas senare i API-demonstrationer), men det är ganska svårt att förstå vad som händer.

Detta är den officiella dokumentationen för det nya API, men det finns inte tillräckligt med information om hur du använder det.

Här berättar han:

Om du verkligen behöver full åtkomst till hela undertexten av dokument, börja med att köra ACTION_OPEN_DOCUMENT_TREE så att användaren kan välja en katalog. Vidarebefordra sedan den mottagna getData () till fromTreeUri (Context, Uri) för att börja arbeta med det träd som användaren har valt.

När du navigerar genom DocumentFile-instansträdet kan du alltid använda getUri () för att få en Uri som representerar det underliggande dokumentet för detta objekt för användning med openInputStream (Uri), etc.

För att förenkla koden på enheter som kör KITKAT eller tidigare kan du använda fromFile, som emulerar DocumentProviders beteende.

frågor

Jag har några frågor om det nya API: t:

2 svar

Många bra frågor, låt mig veta. :)

Hur använder du det?

Här är en bra tutorial för att interagera med KitKat-arkivet åtkomstplattform:

Interaktion med de nya API: erna i Lollipop är mycket lik. För att uppmana användaren att välja ett katalogträd kan du köra denna avsikt på följande sätt:

Intent intention \u003d new Intent (Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult (avsikt, 42);

Sedan kan du i ditt onActivityResult () skicka användarvalt Uri till en ny hjälparklass DocumentFile. Här är ett kort exempel som visar filerna i den valda katalogen och sedan skapar en ny fil:

Public void onActivityResult (int requestCode, int resultCode, Intent resultData) (if (resultCode \u003d\u003d RESULT_OK) (Uri treeUri \u003d resultData.getData (); DocumentFile pickDir \u003d DocumentFile.fromTreeUri (detta, treeUri); // Lista alla befintliga filer inuti plockade katalogen för (DocumentFile-fil: PickDir.listFiles ()) (Log.d (TAG, "Found file" + file.getName () + "med storlek" + file.length ());) // Skapa en ny fil och skriv in den DocumentFile newFile \u003d PickDir.createFile ("text / vanlig", "Min roman"); OutputStream out \u003d getContentResolver (). openOutputStream (newFile.getUri ()); out.write ("För länge sedan .. . ". getBytes ()); out.close ();))

Om du vill komma åt denna Uri från din egen kod kan du ringa ContentResolver.openFileDescriptor () och sedan använda ParcelFileDescriptor.getFd () eller detachFd () för att få den traditionella heltalsfilbeskrivaren POSIX.

Hur kan du kontrollera åtkomst till filer / mappar?

Som standard är Uris tillbaka med funktionerna Storage Access Framework inte kvar på omstarter. Plattformen "erbjuder" möjligheten att spara tillstånd, men du måste fortfarande "ta" tillstånd om du vill. I vårt exempel ovan skulle du ringa:

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

Du kan alltid ta reda på vilka bidrag för din applikation som finns tillgängliga via API: n ContentResolver.getPersistedUriPermissions (). Om du inte längre behöver tillgång till den lagrade Uri kan du frigöra den med ContentResolver.releasePersistableUriPermission ().

Är det tillgängligt på KitKat?

Nej, vi kan inte retroaktivt lägga till nya funktioner till äldre versioner av plattformen.

Kan jag se vilka applikationer som har tillgång till filer / mappar?

Det finns för närvarande inget användargränssnitt som visar detta, men du kan hitta informationen i avsnittet "Beviljade Uri-behörigheter" i adb shell dumpsys-aktivitetsleverantörens utgång.

Vad händer om applikationen är installerad för flera användare på samma enhet?

Uri-behörighetstillstånd är isolerade för varje användare, liksom alla andra funktioner i flerbrukarplattformen. Det vill säga att samma applikation som körs under två olika användare inte har Uri infört eller delade behörigheter.

Kan behörigheter återkallas?

DocumentProvider-rutinen kan återkalla en tillstånd när som helst, till exempel när ett molndokument raderas. Det vanligaste sättet att upptäcka dessa återkallade behörigheter är när de försvinner från ContentResolver.getPersistedUriPermissions () som nämns ovan.

Behörigheter återkallas också när ansökningsdata rensas för alla ansökningar som deltar i bidraget.

Fungerar frågan rekursivt i den valda mappen?

Japp, avsikten med ACTION_OPEN_DOCUMENT_TREE ger dig rekursiv tillgång till befintliga och nyskapade filer och kataloger.

Ger detta flera alternativ?

Ja, flera val stöds med KitKat, och du kan aktivera det genom att ställa EXTRA_ALLOW_MULTIPLE i början av din avsikt ACTION_OPEN_DOCUMENT. Du kan använda Intent.setType () eller EXTRA_MIME_TYPES för att begränsa filtyperna du kan välja:

Finns det ett emulatorsätt att prova ett nytt API?

Ja, huvudlagringsenheten bör visas i samlaren, även på emulatorn. Om din applikation använder lagringsåtkomstplattformen för att få åtkomst till delad lagring behöver du inte längre LÄS / WRITE_EXTERNAL_STORAGE-behörigheter och du kan ta bort dem eller använda android: maxSdkVersion-funktionen för att begära dem endast på tidigare versioner av plattformen.

Vad händer när en användare byter ut ett SD-kort med ett annat?

När fysiska medier är involverade skrivs alltid UUID (som FAT-serienumret) för det primära mediet till den returnerade Uri. Systemet använder detta för att ansluta till media som har valts av användaren, även om användaren byter media mellan flera platser.

Om användaren ändras på den andra kartan måste du begära åtkomst till den nya kartan. När systemet kommer ihåg bidrag baserat på UUID: er kommer du fortsätta att ha tidigare gett åtkomst till den ursprungliga kartan om användaren sätter in den senare.

I mitt Android-projekt på Github nedan hittar du arbetskod som låter dig skriva extSdCard på Android 5. Det antas att användaren ger åtkomst till hela SD-kortet och sedan låter dig skriva överallt på det här kortet. (Om du bara vill ha åtkomst till enstaka filer blir allt enklare.)

Utdrags huvudkod

Lansering av lagringsåtkomstplattformen:

   @TargetApi (Build.VERSION_CODES.LOLLIPOP) private void triggerStorageAccessFramework () (Intent intention \u003d new Intent (Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult (intention, REQUEST_CODE_STORAGE_ACCESS);)

Behandlar svaret från lagringsåtkomstplattformen:

@TargetApi (Build.VERSION_CODES.LOLLIPOP) @Override public final void onActivityResult (final int requestCode, final int resultCode, final Intent resultData) (if (requestCode \u003d\u003d SettingsFragment.REQUEST_CODE_STORAGE_ACCESS) (Uri treeUri \u003d null \u003d Activity; .RESULT_OK) (// Få Uri från lagringsåtkomstramen. TreeUri \u003d resultData.getData (); // Persist URI i delad preferens så att du kan använda det senare. // Använd ditt eget ramverk här istället för PreferenceUtil. PreferenceUtil.setSharedPreferenceUri (R.string.key_internal_uri_extsdcard, treeUri); // Persist åtkomstbehörigheter slutlig int takeFlags \u003d resultData.getFlags () & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION) ;. getActivity () getContentResolver () takePersistableUriPermission (treeUri, takeFlags) .. ;)))

Hämtar utgångsströmmen för en fil via åtkomstplattformen för förvar (använder den lagrade URL, förutsatt att det är URL-adressen till rotmappen på det externa SD-kortet)

DocumentFile targetDocument \u003d getDocumentFile (fil, fel); OutputStream outStream \u003d Application.getAppContext (). getContentResolver (). openOutputStream (targetDocument.getUri ());

Följande hjälpmetoder används:

Public static DocumentFile getDocumentFile (final File file, final boolean isDirectory) (String baseFolder \u003d getExtSdCardFolder (fil); if (baseFolder \u003d\u003d null) (return null;) String relativePath \u003d null; prova (String fullPath \u003d file.getCanonicalPath (); relativePath \u003d fullPath.substring (baseFolder.length () + 1);) catch (IOException e) (return null;) Uri treeUri \u003d PreferenceUtil.getSharedPreferenceUri (R.string.key_internal_uri_extsdcard); if (treeUri \u003d\u003d null) (return null) ;) // börja med roten på SD-kortet och analysera sedan dokumentträdet DocumentFile document \u003d DocumentFile.fromTreeUri (Application.getAppContext (), treeUri); Stringdelar \u003d relativePath.split ("\\\\ /"); för (int i \u003d 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() { List   sökvägar \u003d ny ArrayList<>(); för (Filfil: Application.getAppContext (). getExternalFilesDirs ("extern")) (if (fil! \u003d null &&! file.equals (Application.getAppContext (). getExternalFilesDir ("extern"))) (int index \u003d fil .getAbsolutePath (). lastIndexOf ("/ Android / data"); if (index< 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. * * @return The (statically stored) application context */ public static Context getAppContext() { return Application.mApplication.getApplicationContext(); }







      2019 © gtavrl.ru.