Mendapatkan laluan ke Kad SD pada Android. Apakah yang berlaku jika aplikasi dipasang untuk berbilang pengguna pada peranti yang sama? Bagaimana logik baru berfungsi

dah habis! Pada tablet, iaitu pada Asus Pad MeMO 7, yang saya menggantikan pekerja keras saya yang jujur, telah menerima kemas kini kepada Android 5.0.1. Sekarang saya mempunyai peranti dengan Lollipop, atau, seperti yang mereka katakan di Internet, dengan Lollipop.


Kemas kini tiba agak tidak dijangka. Sejujurnya, saya menunggu pada bulan April perisian tegar baharu ke telefon (Asus ZenFone 5) - dia, oleh sekurang-kurangnya, berjanji. Tiada siapa yang mengatakan apa-apa tentang tablet itu, dan ini terpulang kepada anda, dapatkannya dan tandatanganinya.

Ini, sebenarnya, tidak menggalakkan saya (dengan cara yang baik, sudah tentu), juga kerana saya membeli tablet pada bulan Disember, dan ia mempunyai versi 4.3. Iaitu, ini adalah kemas kini kedua yang penting sistem operasi(sebenarnya, terdapat lebih banyak kemas kini, tetapi bilangannya versi Android tidak berubah). Pengeluar peranti saya sebelumnya - Samsung - tidak boleh berbangga dengan kadar kebakaran sedemikian, walaupun mereka juga mengemas kini sistem pengendalian dua kali: dari Android 3.2 hingga Android 4.1.2 (melalui 4.0.1). Tetapi kami terpaksa menunggu lebih lama untuk versi baharu ini.

Nah, hidup kejutan! Setelah menerima pemberitahuan mengenai pelepasan versi perisian tegar baharu, saya segera memuat turunnya, iaitu lebih daripada 700 meter, dan melancarkan kemas kini. Memandangkan saya tidak memuat turun melalui rangkaian rumah, dan melalui telefon mudah alih, ia mengambil sedikit masa lagi untuk melakukan segala-galanya: dari permulaan muat turun hingga selesai kemas kini, kira-kira sejam berlalu. Kemas kini itu sendiri mengambil masa kira-kira dua puluh minit, tetapi mungkin mengambil masa lebih lama - kerana selepas memasang sistem pengendalian, proses kemas kini mengikuti atur cara yang dipasang. Kaunter saya mengira sehingga 205. Tetapi kini, proses itu telah berakhir dan tiba masanya untuk melihat apa yang telah berubah.

Perkara pertama yang menarik perhatian saya ialah grafik yang lebih canggih semasa membuka kunci peranti. Yang kedua ialah tangan di kawasan pemberitahuan. Saya menahannya selama beberapa hari, berharap secara kebetulan saya akan melihat sesuatu yang berkaitan dengannya di suatu tempat. Saya tidak melihatnya. Kemudian saya mula mencari dengan sengaja dan menemui penjelasan untuknya di 4pda. Ternyata pemberitahuan dibahagikan kepada penting dan tidak begitu penting, dan adalah mungkin untuk menentukan pemberitahuan yang ingin anda terima. Jika anda menetapkan pilihan Sentiasa maklumkan , maka tangan hilang jika pilihan Hanya makluman penting , kemudian tangan muncul. Sejujurnya, saya mengeluarkan tangan saya beberapa kali, tetapi atas sebab tertentu ia sentiasa kembali. kenapa? saya belum tahu lagi.

Di sini, sebenarnya, adalah prosedur untuk "mengeluarkan" tangan ini:

Kaedah yang diberikan di atas tidak rumit sama sekali. Tetapi anda boleh mencapai keputusan dengan lebih cepat dan lebih mudah: tekan salah satu daripada dua butang kawalan kelantangan - tetingkap akan muncul pada skrin yang membolehkan anda menukar tahap kelantangan untuk pelbagai komponen sistem, dan juga, perhatian, mengurus Mod amaran . Benar, atas sebab tertentu, ini sama Mod Makluman dipaparkan dengan cara ini pilihan cepat tidak selalu. Saya belum menemui corak lagi, tetapi, sejujurnya, saya tidak benar-benar mencarinya.

Beberapa perkataan mengenai program yang dipasang. Walaupun sebelum memulakan proses kemas kini saya menerima amaran bahawa beberapa program akan dipadamkan kerana ia tidak disertakan dalam perisian tegar baharu, namun, kebanyakan program kekal.


Satu-satunya perkara yang saya minta maaf adalah program dengan nama atipikal "Dua Aplikasi". Walaupun, saya harus mengakui, saya tidak langsung memahami apa itu: Saya fikir dua aplikasi yang akan dipadamkan, adakah mustahil untuk menunjukkan nama-nama itu.

Ya, program yang muncul dalam versi 4.4.2 dan memungkinkan untuk berkongsi skrin antara dua aplikasi yang dijalankan secara serentak telah tenggelam dalam kelalaian. Sejujurnya, fungsinya agak lemah, kerana ia boleh menjalankan rangkaian aplikasi yang sangat terhad pada masa yang sama. Jika ingatan berguna, saya hanya menggunakannya sekali atau dua kali, hanya untuk melihat bagaimana keadaannya. Mungkin seseorang akan terlepas peluang yang disediakan oleh program ini, tetapi entah bagaimana saya tidak terlalu kecewa. Walaupun, sudah tentu, saya tidak begitu suka apabila mereka mengambil daripada saya apa yang mereka berikan kepada saya sebelum ini.

Beberapa lagi ulasan tentang program. Selepas saya berpindah ke tablet baharu, saya meluangkan sedikit masa untuk memasang program padanya yang saya gunakan pada peranti saya sebelum ini. Sebahagian daripada mereka berlaku, tetapi kita tidak bercakap tentang mereka sekarang. Kita bercakap tentang program-program yang tingkah lakunya telah mengubah sesuatu. Sudah tentu, saya belum mencuba segala-galanya lagi, tetapi inilah yang saya temui setakat ini.

TuniIn Radio Pro, yang saya beli, dengan cara itu, sama sekali tidak berfungsi pada KitKat. Segala-galanya berjalan lancar - sehingga giliran datang terus untuk mendengar stesen radio. Iaitu, program itu dilancarkan, saya memilih sekumpulan stesen radio, contohnya, Stesen Radio Tempatan, memilih stesen tertentu (contohnya, RockFM, Radio Jazz, atau mana-mana stesen secara umum), selepas itu program itu ranap dengan ralat. Kadang-kadang ada bunyi, tetapi program masih ranap. Masa berlalu, kemas kini TuneIn Radio telah dikeluarkan, tetapi tiada apa yang berubah. Walau bagaimanapun, selepas mengemas kini kepada A, masalah itu hilang secara ajaib, dan kini semuanya berfungsi tanpa sebarang aduan.

Satu lagi perubahan positif - suite pejabat SoftMaker Office HD, juga dibeli secara jujur. Program yang disertakan di dalamnya berfungsi seperti biasa pada tablet Samsung. Apabila saya memasang program ini pada tablet baharu, ia tidak bermula sama sekali. Selepas beberapa lama, kemas kini untuk pejabat ini dikeluarkan dan keadaan agak bertambah baik: program mula dilancarkan, walaupun semasa operasi, di kawasan menu (garisan atas tetingkap program), beberapa artifak grafik pelik terkumpul. Apabila beralih ke desktop (atau aplikasi lain) dan kembali, artifak itu hilang, tetapi tidak lama. Selepas Kemas kini Android Semua program yang disertakan dalam pakej berfungsi seperti kerja jam.

Nah, titik negatif kecil. Saya menggunakan, sangat aktif, program yang dipanggil DVR. Saya juga membayar wang untuknya juga. Program ini berfungsi dengan baik pada tablet baharu, tiada aduan, ditambah, fungsi yang tidak tersedia pada tablet sebelumnya berfungsi, sebagai contoh, penstabilan video. Selepas mengemas kini OS, program mula ranap secara berterusan apabila memulakan rakaman. Pada mulanya, saya fikir terdapat beberapa masalah dengan rakaman ke kad memori - saya telah dikonfigurasikan untuk menulis ke direktori program pada kad MicroSD luaran. Tetapi, selepas saya dapat mencipta subdirektori dalam direktori rakaman dalam program itu sendiri, menjadi jelas bahawa penggunaan kad luaran tidak ada kena mengena dengannya. Kemudian saya memutuskan untuk melumpuhkan satu fungsi program pada satu masa, dan perkara pertama yang disentuh jari saya ialah kotak semak dengan kotak pilihan penstabilan. Selepas mematikan pilihan, program mula merakam video, tetapi kualitinya menurun. Tidak, resolusi dan kadar aliran - semuanya kekal sama, tetapi gambar pada rakaman terapung dalam gelombang. Terdapat tetapan dalam program yang cuba melancarkan kesan ini, dan, pada dasarnya, menghidupkannya agak membantu, tetapi atas sebab tertentu, apabila anda memasuki semula program, tanda bahawa pilihan didayakan kekal, tetapi gambar terapung, seolah-olah pilihan dilumpuhkan . Jika anda mengklik pada pilihan yang sudah didayakan, semuanya akan kembali normal dengan serta-merta. Kemungkinan besar, ini adalah pepijat dalam program, saya akan melaporkannya kepada pembangun dan, mungkin, pengarang akan membetulkan gangguan ini. Tetapi hakikat bahawa penstabilan video tidak berfungsi adalah sedikit menjengkelkan. Pertama sekali, kerana program kakitangan Kamera mempunyai pilihan penstabilan dalam tetapan dan, apabila ia dihidupkan, rakaman dijalankan tanpa ralat.

Daripada kes khas yang berkaitan dengan program, saya akan beralih kepada sifat yang lebih umum sistem. Nah, pertama sekali, bilangan ingatan bebas. Seperti yang telah saya tulis, semua perisian saya kekal di tempatnya. Pada masa yang sama, saya mesti mengatakan bahawa saya menegangkan tablet dengan banyak. Bukan dari segi fakta bahawa saya sentiasa bermain permainan, tetapi dari segi fakta bahawa saya mempunyai banyak perkhidmatan yang bergantung kepada, beberapa daripadanya mungkin tidak saya gunakan, tetapi saya simpan untuk berjaga-jaga. Kami bercakap, pertama sekali, tentang semua jenis mel - Outlook, Yandex Mail, GMail, lebih tepat lagi, kini Peti Masuk. Seterusnya, pelbagai penyimpanan awan- Cakera Yandex, OneDrive, Google Drive, Dropbox, Box, Asus WebStorage. berpasangan rangkaian sosial- Odnoklassniki dan Google+. Pelbagai jenis messenger lain - Viber, ICQ, Skype, Hangouts. Semua program ini, satu cara atau yang lain, memakan memori peranti, walaupun anda tidak menggunakannya. Tetapi, pada dasarnya, saya faham apa yang saya hadapi.

Pengguna peranti Asus tahu bahawa terdapat aplikasi dalam tirai Android yang membolehkan anda mengosongkan memori, sekurang-kurangnya buat sementara waktu. Dalam lima teratas ia dipanggil Pembersihan, tetapi dalam KitKat ia dipanggil lebih hebat - Pengukuhan. Apabila anda membuka tirai, ikon aplikasi ini menunjukkan jumlah ruang kosong. masa ini ingatan. Jadi, apabila Android versi 4.4.2 dipasang pada tablet, angka ini turun naik dalam julat 200-300 MB dan ikon, selalunya, berwarna kuning. Kini jumlah memori percuma berbeza dari 400 hingga 600 MB dan ikon berwarna hijau hampir sepanjang masa. Perubahan ini mungkin disebabkan oleh perubahan tersebut mesin maya, digunakan dalam Lollipop, tetapi mungkin sesuatu telah berubah dalam firmware itu sendiri, sebagai contoh, Asus telah mengeluarkan sesuatu. Secara umum, kita perlu memikirkannya.

Menukar mesin maya sepatutnya menjejaskan dua lagi parameter - prestasi dan penggunaan kuasa. Apa yang boleh saya katakan tentang prestasi? Tidak ada, mungkin. Saya tidak bermain dengan mainan, saya tidak begitu suka bersaing dengan burung kakak tua (Antutu, dll.). Tablet itu sendiri agak berkuasa, jadi saya tidak perasan sebarang kelembapan sama ada pada KitKat atau kini dalam Lollipop. Semuanya lancar dan tanpa keluhan. Semasa saya memandu, DVR, Strelka, Peta (sama ada Yandex atau Google) berfungsi, saya juga mendengar muzik menggunakan Kodi, dan, selepas semua ini, ia masih bertindak balas untuk beralih ke desktop, melancarkan beberapa program lain, secara umum , adalah binatang.

Dan mengenai penggunaan tenaga... Pada asasnya, kemas kini terkini pada KitKat telah menafikan saya peluang untuk mengadu tentang ketidakcekapan peranti. Jika selepas pemasangan awal Tablet KitKat kehilangan 20-30 peratus daripada rizab tenaganya setiap malam, tetapi selepas mengemas kini kepada versi perisian tegar ke-31, kerugian menjadi agak boleh diterima - daripada dua hingga lima peratus setiap malam. Mengemas kini kepada Lollipop tidak memburukkan apa-apa dalam pengertian ini, dan terima kasih banyak untuk itu. Bagi penggunaan di bawah beban, di sini sekali lagi saya boleh memetik pengalaman operasi di dalam kereta: semua yang awal yang sama - DVR, Strelka, Yandex Navigator, Kodi, kecerahan skrin adalah kira-kira 75-80 peratus - hari yang cerah, cerah, serta segala-galanya antara muka wayarles dihidupkan, dan sebagainya, semasa perjalanan - kira-kira dua jam - bateri telah dinyahcas kepada 57 peratus. Pada pendapat saya, agak layak. By the way, di bawah KitKat ia adalah lebih kurang sama.

Nah, perkara terakhir - disenaraikan mengikut urutan, tetapi tidak mengikut urutan kepentingan - adalah apa yang saya ingin ambil perhatian. Kami akan bercakap tentang bekerja dengan kad memori luaran. Saya, semasa saya keluar dari situasi yang disebabkan oleh sekatan KitKat untuk merakam ke kad memori luaran. Nampaknya, gelombang negatif sangat kuat sehingga Google terpaksa mendengar dan mengubah sesuatu. Atau mungkin mereka hanya mengubah sesuatu tanpa mendengar sesiapa. Tetapi mari kita tinggalkan yang ini soalan penting mengetepikan (mereka mendengar / tidak mendengar), mari kita beralih kepada perubahan itu sendiri.

Google dibenarkan program pihak ketiga tulis pada kad memori. Pada dasarnya beliau tidak melarang sebelum ini, cuma permit dikeluarkan sedemikian rupa, jika keadaan biasa, hanya pengurus fail asli yang mempunyai akses tulis kepada keseluruhan kad luaran. Nah, mungkin sesetengah pengeluar membenarkan akses kepada program mereka yang lain, tetapi saya hanya menemui pengurus fail. Sekarang mana-mana program boleh menulis, tetapi untuk ini beberapa syarat mesti dipenuhi.

Pertama, program mesti menggunakan ciri baharu Rangka Kerja Akses Storan, iaitu, gunakan niat OPEN_DOCUMENT_TREE dan beberapa fungsi SDK baharu atau dikemas kini.

Kedua, pengguna mesti memutuskan sendiri cawangan (atau cawangan) sistem fail yang akan diberikannya akses kepada aplikasi ini atau itu. Iaitu, anda boleh memberikan akses kepada keseluruhan kad jika, sebagai tindak balas kepada permintaan untuk akses, anda menentukan akarnya, atau anda boleh memberikan akses hanya kepada folder tertentu dan dia elemen kanak-kanak. Secara umum, anda perlu bertanggungjawab ke atas diri sendiri, dan, jika sesuatu berlaku, anda juga hanya akan dipersalahkan.

Ketiga ialah nasib. Pada tablet saya semuanya berfungsi sebagaimana mestinya, pada tablet rakan saya HTC satu M8 - tidak berfungsi, walaupun dalam talian ada video, bagaimana semuanya berfungsi hebat pada model telefon pintar ini. Walau bagaimanapun, terdapat andaian bahawa ia tidak berfungsi kerana kad dalam telefonnya diformatkan entah bagaimana salah, mungkin tanpa menunjukkan nama volum, atau mungkin salah sistem fail.

Sebenarnya, ini adalah berita gembira dan sedih pada masa yang sama. Gembira - kerana kini anda tidak perlu mendapatkan akses root kepada peranti dan anda tidak perlu mengehadkan diri anda kepada direktori aplikasi sahaja. Sedih - kerana sehingga pembangun berkenan untuk menggunakan API baharu dan mengeluarkan versi baharu program mereka, tiada apa yang akan berfungsi. Dari pengalaman saya: pengurus fail ES Explorer telah pun memperoleh sokongan untuk API baharu, dan saya dapat memberikannya hak menulis kepada keseluruhan kad SD luaran, tetapi pengurus fail Total Commander tidak dan masih tidak boleh menulis ke kad MicroSD - di mana-mana kecuali direktorinya sendiri. Macam ni.

Sebenarnya, terdapat banyak nuansa dalam keseluruhan cerita ini dengan rakaman ke kad memori luaran. Contohnya, anda memberi beberapa program akses, tetapi melupakan yang lain. Mana nak cari? Seperti yang saya faham, pada masa ini - tiada tempat. Iaitu, pada dasarnya, anda boleh melihat, tetapi bukan pada tablet itu sendiri, tetapi pada komputer, jika anda menyambungkan tablet kepadanya dan menggunakan program adb. Inilah arahan yang anda perlukan:

Penyedia aktiviti adb shell dumpsys

Tetapi saya tidak menemui cara untuk mendapatkan perkara yang sama pada tablet.

Soalan seterusnya. Anda memberikan beberapa akses aplikasi untuk menulis ke beberapa folder, dan kemudian anda mengubah fikiran anda dan ingin mengambilnya. Adakah terdapat kemungkinan sedemikian? Nasib baik ya. Tetapi dengan kerugian. Pertama, sangat cara radikal- Anda boleh mengalih keluar program dan memasangnya semula. Kaedah kedua tidak begitu radikal, tetapi juga tidak sesuai - anda perlu mengosongkan data aplikasi dalam Tetapan peranti. Sememangnya, bersama dengan hak akses, data program lain akan dipadamkan, jadi persoalan logik timbul tentang kebolehgunaan praktikal kaedah ini. Ia tidak mungkin untuk menemui kaedah lain, mungkin lagi. Anda boleh menggunakan kedua-dua kaedah jika anda mula-mula membuat sandaran data program, dan selepas melaksanakan salah satu kaedah, pulihkannya. Tetapi di sini persoalan timbul tentang keupayaan sandaran - adakah hanya data akan disandarkan, atau data bersama dengan kebenaran? Jika dengan kebenaran, maka selepas pemulihan, anda faham... Semua ini sangat bergantung pada aplikasi khusus yang digunakan, jadi anda harus berhati-hati. Dan ini adalah satu lagi sebab yang baik untuk berfikir sebelum anda melihat Moscow purba, tanpa kebenaran pihak berkuasa yang berkaitan, memberikan hak kepada mana-mana permohonan untuk mengakses sistem fail kad luaran.

Lebih lanjut lagi. Apakah yang berlaku jika anda menukar kad yang dimasukkan ke dalam slot tablet anda? Jawapannya ialah anda perlu memberikan akses secara berasingan kepada setiap kad yang anda masukkan ke dalam peranti. Pada dasarnya, ini mungkin logik. Iaitu, anda memberi pengurus fail akses kepada akar kad, kemudian mengeluarkannya dan memasukkan satu lagi. Pengurus fail tidak akan menulis pada kad baharu; anda perlu memberikan akses sekali lagi. Tetapi apabila anda mengembalikan kad pertama ke tablet, pengurus fail akan menulis kepadanya tanpa masalah.

Satu soalan lagi. Jadi anda memberikan akses aplikasi kepada beberapa folder, bukan yang akar. Masa berlalu dan anda perlu membenarkan akses tulis kepada program yang sama dalam folder lain pada kad yang sama. Bolehkah ini dilakukan? Pada dasarnya, ini adalah akibat daripada kes sebelumnya, jadi jawapannya ialah: ya, mungkin. Iaitu, sistem untuk setiap aplikasi akan mengingati senarai direktori yang telah anda berikan akses tulis.

Kini terdapat nuansa yang dikaitkan dengan aplikasi yang dipasang pada tablet untuk setiap pengguna yang profilnya dibuat pada peranti. Di sini, juga, semuanya adalah logik - untuk setiap pengguna peranti, hak akses mereka sendiri untuk aplikasi disimpan, iaitu, setiap orang adalah arkitek kebahagiaan mereka sendiri, atau, jika anda suka, Pinocchio jahat mereka sendiri.

Dan sudah tentu, banyak bergantung pada kelayakan pemaju. Ia mungkin berlaku bahawa anda memberi hak kepada beberapa program untuk mengakses kad luaran untuk menulis, dan selepas but semula tablet anda mendapati bahawa tiada akses. Dalam keadaan sedemikian, hanya pembangun program yang harus dipersalahkan - dia tidak mengambil berat untuk mengekalkan kebenaran yang diterima. Mungkin anda harus memikirkannya dan mencari alternatif kepada program ini, kerana anda tidak pernah tahu apa yang tidak disediakan oleh pengaturcara sedemikian.

Oh ya, inilah proses mengeluarkan hak rakaman kad mikroSD untuk Pendawaian ES:

Kami memerlukan kad luaran

Mari cuba mencipta sesuatu tepat di akar peta






Kami perlu memaparkan kad SD


Ini dia, kad memori luaran kami



Nah, itu sahaja buat masa ini.

P.S. Kebetulan masa yang agak lama telah berlalu sejak saya menulis bahan ini. Saya boleh menerbitkannya berkali-kali, tetapi saya terus menangguhkannya, dan tidak jelas mengapa. Lebih tepat lagi, saya tahu sebabnya - saya masih memutuskan cara terbaik untuk mempersembahkan satu siri tangkapan skrin yang menerangkan proses tertentu: hanya sebagai jujukan imej yang disisipkan atau sebagai tayangan slaid. Akhirnya, keputusan dibuat untuk menggunakan (sekurang-kurangnya buat masa ini) urutan imej. Bagaimana semua ini berlaku adalah topik untuk siaran berasingan. Buat masa ini, semuanya kekal seperti sedia ada, cuma sayangnya banyak masa terbuang. Satu-satunya penghiburan ialah ia tidak sia-sia. Di samping itu, satu peristiwa yang menggembirakan berlaku. Saya menulis dalam mesej ini bahawa akses kepada peta luaran memori hanya akan tersedia apabila pengarang program mula menggunakan API baharu. Sebagai contoh program di mana API baharu tidak digunakan, saya berikan Komander Total. Jadi, semasa saya menangguhkan penerbitan, Total Commander telah dikemas kini, dan kini ia juga boleh berfungsi dengan kad memori luaran dalam gaya Android Lollipop. Di bawah saya menyediakan satu siri tangkapan skrin yang menerangkan proses mencipta direktori baharu dalam akar kad memori luaran dengan menggunakan Jumlah Komander:

Memilih kad memori luaran
dan pilih item yang dikehendaki daripada menu
Itu sahaja mungkin buat masa ini.

Masalah

Mesej tersebut mengarahkan anda untuk melawati dua tapak web:

Ini kelihatan seperti contoh dalaman (mungkin ditunjukkan dalam demo API kemudian), tetapi agak sukar untuk memahami perkara yang berlaku.

ini dokumentasi rasmi pada API baharu, tetapi ia tidak mempunyai maklumat yang mencukupi tentang cara menggunakannya.

Inilah yang dia beritahu anda:

Jika anda benar-benar memerlukan akses penuh kepada keseluruhan subpokok dokumen, mulakan dengan menjalankan ACTION_OPEN_DOCUMENT_TREE untuk membolehkan pengguna memilih direktori. Kemudian hantar getData() yang terhasil kepada fromTreeUri(Konteks, Uri) untuk mula bekerja dengan pepohon yang dipilih pengguna.

Apabila menavigasi pepohon contoh DocumentFile, anda sentiasa boleh menggunakan getUri() untuk mendapatkan Uri mewakili dokumen asas untuk objek ini digunakan dengan openInputStream(Uri), dsb.

Untuk memudahkan kod pada peranti yang menjalankan KITKAT atau lebih awal, anda boleh menggunakan fromFile(File), yang meniru tingkah laku DocumentProvider.

Soalan

Saya mempunyai beberapa soalan tentang API baharu:

2 jawapan

Sekumpulan soalan yang bagus, biar saya faham. :)

Bagaimana anda menggunakannya?

Berikut ialah tutorial hebat untuk berinteraksi dengan rangka kerja akses storan dalam KitKat:

Interaksi API baharu Lollipop sangat serupa. Untuk menggesa pengguna memilih pepohon direktori, anda boleh menjalankan niat seperti ini:

Niat niat = Niat baharu(Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult(niat, 42);

Kemudian dalam onActivityResult() anda, anda boleh menghantar Uri yang dipilih pengguna ke kelas pembantu DocumentFile baharu. Berikut ialah contoh ringkas yang menyenaraikan fail dalam direktori yang dipilih dan kemudian mencipta fail baharu:

Public void onActivityResult(int requestCode, int resultCode, Intent resultData) ( if (resultCode == RESULT_OK) ( Uri treeUri = resultData.getData(); DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri); // Senaraikan semua fail sedia ada di dalam memilih direktori untuk (Document Fail fail: pickedDir.listFiles()) ( Log.d(TAG, "Found file " + file.getName() + " with size " + file.length()); ) // Cipta fail baharu dan tulis ke dalamnya DocumentFile newFile = pickedDir.createFile("teks/plain", "Novel Saya"); OutputStream out = getContentResolver().openOutputStream(newFile.getUri()); out.write("Dah lama dahulu...".getBytes()); out.close(); ) )

Jika anda ingin mengakses Uri ini dari kod sendiri, anda boleh memanggil ContentResolver.openFileDescriptor() dan kemudian gunakan ParcelFileDescriptor.getFd() atau detachFd() untuk mendapatkan deskriptor fail integer POSIX tradisional.

Bagaimanakah anda boleh menyemak akses kepada fail/folder?

Secara lalai, Uris yang dikembalikan oleh keupayaan Rangka Kerja Akses Storan tidak berterusan sepanjang but semula. Platform "menawarkan" keupayaan untuk menyimpan kebenaran, tetapi anda masih perlu "mengambil" kebenaran jika anda mahukannya. Dalam contoh kami di atas, anda akan memanggil:

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

Anda sentiasa boleh mengetahui geran berterusan yang tersedia untuk permohonan anda melalui API ContentResolver.getPersistedUriPermissions(). Jika anda tidak lagi memerlukan akses kepada Uri yang disimpan, anda boleh mengeluarkannya menggunakan ContentResolver.releasePersistableUriPermission() .

Adakah ini tersedia pada KitKat?

Tidak, kami tidak boleh menambah ciri baharu secara retroaktif pada versi platform yang lebih lama.

Bolehkah saya melihat aplikasi mana yang mempunyai akses kepada fail/folder?

Pada masa ini tiada UI yang menunjukkan perkara ini, tetapi anda boleh mendapatkan maklumat dalam bahagian Uri Kebenaran Diberi pada output penyedia aktiviti adb shell dumpsys.

Apakah yang berlaku jika aplikasi dipasang untuk berbilang pengguna pada peranti yang sama?

Kebenaran resolusi uri diasingkan bagi setiap pengguna, seperti semua ciri platform berbilang pengguna yang lain. Iaitu, aplikasi yang sama berjalan di bawah dua oleh pengguna yang berbeza, tidak mempunyai tindanan atau kebenaran am Uri.

Bolehkah kebenaran dibatalkan?

Rutin DocumentProvider boleh membatalkan kebenaran pada bila-bila masa, contohnya apabila ia dialih keluar dokumen awan. Cara paling biasa untuk mengesan kebenaran yang dibatalkan ini ialah apabila ia hilang daripada ContentResolver.getPersistedUriPermissions() yang dinyatakan di atas.

Kebenaran juga dibatalkan apabila data permohonan dibersihkan untuk mana-mana permohonan yang menyertai geran.

Adakah pertanyaan akan dijalankan secara rekursif pada folder yang dipilih?

Ya, niat ACTION_OPEN_DOCUMENT_TREE memberi anda akses rekursif kepada fail dan direktori sedia ada dan baru dibuat.

Adakah ia menyediakan berbilang pilihan?

Ya, berbilang pilihan telah disokong sejak KitKat, dan anda boleh mendayakannya dengan menetapkan EXTRA_ALLOW_MULTIPLE apabila menjalankan niat ACTION_OPEN_DOCUMENT anda. Anda boleh menggunakan Intent.setType() atau EXTRA_MIME_TYPES untuk mengecilkan jenis fail yang boleh dipilih:

Adakah terdapat cara untuk emulator mencuba API baharu?

Ya, peranti storan utama harus muncul dalam pembina, walaupun pada emulator. Jika aplikasi anda menggunakan rangka kerja akses storan untuk mengakses storan kongsi, anda tidak lagi memerlukan kebenaran READ/WRITE_EXTERNAL_STORAGE dan boleh mengalih keluarnya atau menggunakan fungsi android:maxSdkVersion untuk memintanya hanya pada versi rangka kerja yang lebih awal.

Apakah yang berlaku apabila pengguna menggantikan kad SD dengan yang lain?

Apabila media fizikal terlibat, UUID (seperti nombor siri FAT) media asas sentiasa ditulis ke dalam Uri yang dikembalikan. Sistem menggunakan ini untuk menyambung ke media yang telah dipilih oleh pengguna, walaupun pengguna menukar media antara berbilang slot.

Jika pengguna menukar pada kad kedua, anda perlu meminta akses kepada peta baharu. Oleh kerana sistem mengingati geran berdasarkan UUID, anda akan terus memberikan akses kepada kad asal sebelum ini jika pengguna memasukkannya semula kemudian.

dalam saya projek Android Dalam Github di bawah anda boleh menemui kod berfungsi yang membenarkan menulis ke extSdCard pada Android 5. Ia menganggap bahawa pengguna memberikan akses kepada keseluruhan kad SD dan kemudian membenarkan menulis di mana-mana pada kad itu. (Jika anda hanya mahu mengakses fail tunggal, perkara menjadi lebih mudah.)

Coretan kod utama

Melancarkan platform akses storan:

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

Memproses respons daripada platform akses storan:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public final void onActivityResult(final int requestCode, final int resultCode, final Intent resultData) ( if (requestCode == SettingsFragment.REQUEST_CODE_STORAGE_ACCESS) ( Uri treeUriult null; if .RESULT_OK) ( // Dapatkan Uri daripada Rangka Kerja Akses Storan. treeUri = resultData.getData(); // Kekalkan URI dalam keutamaan dikongsi supaya anda boleh menggunakannya kemudian. // Gunakan rangka kerja anda sendiri di sini dan bukannya PreferenceUtil. PreferenceUtil.setSharedPreferenceUri (R.string.key_internal_uri_extsdcard, treeUri); // Kebenaran akses berterusan. final int takeFlags = resultData.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSIONtre); getActivity().getriContentRead_PERMISSION(), getActivity().getriPertaketentReAD_URI_PERMISSION ;)))

Mendapatkan strim output untuk fail melalui platform akses storan (menggunakan URL yang disimpan, dengan mengandaikan ia ialah URL folder akar kad SD luaran)

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

Kaedah pembantu berikut digunakan:

Public static DocumentFile getDocumentFile(fail Fail akhir, boolean akhir isDirectory) ( String baseFolder = getExtSdCardFolder(fail); if (baseFolder == null) ( return null; ) String relativePath = null; cuba ( String fullPath = file.getCanonicalPath(); relativePath = fullPath.substring(baseFolder.length() + 1); ) catch (IOException e) ( return null; ) Uri treeUri = PreferenceUtil.getSharedPreferenceUri(R.string.key_internal_uri_extsdcard);jika (treeUri == null) ( return null ; ) // bermula dengan akar kad SD dan kemudian menghuraikan melalui pepohon dokumen. DocumentFile document = DocumentFile.fromTreeUri(Application.getAppContext(), treeUri); String parts = relativePath.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() { Listlaluan = ArrayList baharu<>(); untuk (Fail Fail: Application.getAppContext().getExternalFilesDirs("luaran")) ( jika (fail != null && !file.equals(Application.getAppContext().getExternalFilesDir("luaran"))) ( int index = fail .getAbsolutePath().lastIndexOf("/Android/data"); jika (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 permohonan konteks. * * @return Konteks aplikasi (disimpan secara statik) */ public static Context getAppContext() ( return Application.mApplication.getApplicationContext(); )

dah habis! Tablet itu, iaitu Asus MeMO Pad 7, yang saya gantikan dengan pekerja keras yang jujur, menerima kemas kini kepada Android 5.0.1. Sekarang saya mempunyai peranti dengan Lollipop, atau, seperti yang mereka katakan di Internet, dengan Lollipop.

Kemas kini tiba agak tidak dijangka. Sejujurnya, saya sedang menunggu firmware baharu untuk telefon (Asus ZenFone 5) pada bulan April - sekurang-kurangnya ia telah dijanjikan. Tiada siapa yang mengatakan apa-apa tentang tablet itu, dan ini terpulang kepada anda, dapatkannya dan tandatanganinya.

Ini, sebenarnya, tidak menggalakkan saya (dengan cara yang baik, sudah tentu), juga kerana saya membeli tablet pada bulan Disember, dan ia mempunyai versi 4.3. Iaitu, ini adalah kemas kini kedua penting sistem pengendalian (sebenarnya, terdapat lebih banyak kemas kini, tetapi nombor versi Android tidak berubah). Pengeluar peranti saya sebelumnya - Samsung - tidak boleh berbangga dengan kadar kebakaran sedemikian, walaupun mereka juga mengemas kini sistem pengendalian dua kali: dari Android 3.2 hingga Android 4.1.2 (melalui 4.0.1). Tetapi kami terpaksa menunggu lebih lama untuk versi baharu ini.

Nah, hidup kejutan! Setelah menerima pemberitahuan mengenai pelepasan versi perisian tegar baharu, saya segera memuat turunnya, iaitu lebih daripada 700 meter, dan melancarkan kemas kini. Memandangkan saya tidak memuat turun melalui rangkaian rumah saya, tetapi melalui rangkaian mudah alih, semuanya mengambil sedikit masa lagi: dari permulaan muat turun hingga selesai kemas kini, kira-kira sejam berlalu. Kemas kini itu sendiri berlangsung kira-kira dua puluh minit, tetapi mungkin mengambil masa yang lebih lama - kerana selepas memasang sistem pengendalian, proses mengemas kini program yang dipasang mengikuti. Kaunter saya mengira sehingga 205. Tetapi kini, proses itu telah berakhir dan tiba masanya untuk melihat apa yang telah berubah.

Perkara pertama yang menarik perhatian saya ialah grafik yang lebih canggih semasa membuka kunci peranti. Yang kedua ialah tangan di kawasan pemberitahuan. Saya menahannya selama beberapa hari, berharap secara kebetulan saya akan melihat sesuatu yang berkaitan dengannya di suatu tempat. Saya tidak melihatnya. Kemudian saya mula mencari dengan sengaja dan menemui penjelasan untuknya di 4pda. Ternyata pemberitahuan dibahagikan kepada penting dan tidak begitu penting, dan adalah mungkin untuk menentukan pemberitahuan yang ingin anda terima. Jika anda menetapkan pilihan Sentiasa maklumkan , maka tangan hilang jika pilihan Hanya makluman penting , kemudian tangan muncul. Sejujurnya, saya mengeluarkan tangan saya beberapa kali, tetapi atas sebab tertentu ia sentiasa kembali. kenapa? saya belum tahu lagi.

Di sini, sebenarnya, adalah prosedur untuk "mengeluarkan" tangan ini:

Kaedah yang diberikan di atas tidak rumit sama sekali. Tetapi anda boleh mencapai hasilnya dengan lebih cepat dan lebih mudah: tekan salah satu daripada dua butang kawalan kelantangan - tetingkap akan muncul pada skrin yang membolehkan anda menukar tahap kelantangan untuk pelbagai komponen sistem, dan juga, perhatian, kawalan Mod amaran . Benar, atas sebab tertentu, ini sama Mod Makluman tidak selalu dipaparkan dengan cara yang begitu pantas. Saya belum menemui corak lagi, tetapi, sejujurnya, saya tidak benar-benar mencarinya.

Saya tidak menemui sebarang kemas kini Android rasmi (untuk wilayah kami) di tapak web rasmi.

Saya menemui maklumat di forum bahawa Google mengeluarkan versi perisian tegar untuk Rusia pada Januari 2015. Tetapi ia dilaksanakan dengan sangat perlahan pada peranti pelanggan.

Dengan cara ini, saya boleh menunggu sehingga peranti saya menerima mesej bahawa terdapat kemas kini perisian. Selepas itu saya boleh mengemas kini Android.

Dengan kemas kini kepada, pengguna menerima beberapa sekatan ke atas penggunaan kad SD. Sehingga baru-baru ini, masalah ini boleh diselesaikan menggunakan perisian tegar tersuai atau kembali ke yang lebih versi awal OS. Kini peluang yang dahulu boleh dikembalikan Android 4.4 KitKat. Baca terus untuk mengetahui cara melakukan ini.

Pertama sekali, anda perlu mengakar anda Android peranti. Kedua syarat penting– aplikasi ini SDFix. Muat turun aplikasi di Android secara percuma anda boleh terus dari . Untuk melakukan ini, gunakan pautan di bawah.

Setelah memasang SDFix sendiri Android, anda akan memulihkan keupayaan dahulu anda dalam beberapa ketikan. Prinsip operasi aplikasi ialah SDFix menambah kumpulan Android UNIX "media_rw" ke WRITE_EXTERNAL_STORAGE dengan itu digunakan dalam Android 4.4 KitKat XML fail bertukar kepada platform.xml. Ini mencipta salinan sandaran persediaan awal platform.xml.original-pre-sdfix, yang boleh digunakan untuk memulihkan sekatan. Untuk mengembalikan sistem kepada keadaan stok, anda perlu menggunakan explorer yang menyokong akses root dan menggantikan platform.xml dengan platform.xml.original-pre-sdfix.

Secara berasingan, perlu diingatkan bahawa aplikasi yang menggunakan SD akan menerima lebih banyak Level rendah keselamatan. Juga penting ialah hakikat bahawa SDFix menghasilkan perubahan kekal, yang bermaksud bahawa setelah kebenaran lama dipulihkan, aplikasi boleh dipadamkan.

saya beli telefon baru Samsung Galaxy S5, dan serta-merta menghadapi masalah di bilik pembedahan sistem Android. Lebih tepat lagi, versi Android 4.4 KitKat. Versi Android ini diperkenalkan ciri baharu pemaju Google.

Aplikasi kini dinafikan akses untuk mengedit fail pada kad SD!Ini menyebabkan beberapa aplikasi tidak berfungsi!

Saya akan memberitahu anda bagaimana untuk mengatasi masalah ini!

Selamat petang, wahai pembaca sekalian blog kami!

Pada hari yang lain saya membeli telefon baru untuk diri saya sendiri! Samsung Galaxy S5!

MENIKMATI TELEFON BARU ANDA

Saya mengucapkan tahniah kepada diri saya sendiri atas pembelian yang berjaya, yang saya impikan selama beberapa tahun! Telefon itu ternyata sangat pantas, berkuasa, cantik dan mudah!

Saya sudah mempunyainya sebelum ini telefon HTC(dia sudah berumur kira-kira 4-5 tahun) dengan sistem Android. Salah satu telefon pertama dengan sistem sedemikian (pada masa pembelian). Saya mengkajinya di dalam dan luar, menyegarkan semula sistem beberapa kali, dan memilih perisian tegar Android, yang jauh lebih unggul dalam fungsinya daripada yang rasmi pada masa itu.

Bagi yang tidak tahu, flashing adalah pengganti sistem operasi telefon. Nah, itu sahaja memasang semula Windows pada komputer.

Banyak masa telah berlalu, banyak versi Android telah dikeluarkan (pada masa pembelian saya mempunyai Android 2.2). Versi baharu dan telefon di mana ia dipasang jauh lebih baik daripada telefon pintar lama saya. Oleh itu, saya sangat terkejut dengan kuasa, kelajuan dan fungsi.

Saya menikmatinya selama kira-kira 4 hari. Kemudian saya terjumpa masalah!

MASALAH! Sistem fail melarang mengedit fail!

Selepas kemas kini seterusnya, sistem pengendalian telefon itu sendiri telah dikemas kini kepada Android 4.4.

Bayangkan saya terkejut apabila saya tidak dapat mengedit satu fail telefon sendiri! Pada mulanya saya bersalah kerana gangguan, saya mendaftar masuk folder yang berbeza, cuba mengedit fail daripada komputer (dengan menyambungkan kabel ke telefon). Tiada cara untuk mengedit fail!

Selepas melihat maklumat tentang sistem pengendalian dalam Tetapan - Perihal peranti - Status SE untuk Android, saya melihat perkataan Menguatkuasakan.

Ini adalah kod perkataan Google bermaksud versi Android yang hak aplikasinya terhad pada peringkat kernel sistem pengendalian! EMAE! Nah, saya faham!

Saya beralih ke Internet untuk menyelesaikan masalah

Inilah yang saya temui:

X Saya baru perasan bahawa telefon saya benar-benar baharu, dengan waranti pengilang selama 5 tahun!

Jika anda mendapat akses Root (hak pentadbir dalam sistem Android), maka waranti daripada pengeluar (Samsung) hilang. Malah, beberapa tapak penggodam mendakwa bahawa terdapat kaedah khas untuk mengembalikan kaunter kilang ke kedudukan asalnya. Kaunter kilang ditetapkan semula kepada sifar apabila akses Root diperoleh. Ia menunjukkan syarikat perkhidmatan bahawa telefon telah digodam dan tidak dilindungi oleh jaminan.

Untuk mempengaruhi kaunter ini, anda perlu membuka telefon dan masuk ke dalam cip. Oleh itu, jangan terpengaruh dengan penipuan seperti itu!

Jika anda mendapat akses Root, waranti anda akan hilang! Diuji pada telefon lama saya!


Dalam versi baharu Android 5.0, Google menggunakan logik yang berbeza untuk menyekat akses kepada kad memori SD luaran.

1. Bagaimanakah logik baru berfungsi?

Aplikasi dipasang pada sistem dalam bentuk tersusun. Iaitu, dalam bentuk sedia untuk dilancarkan. Ini meningkatkan prestasi, berbilang tugas dan mengurangkan penggunaan bateri.

Dalam erti kata lain, sebelum ini sistem mempunyai fail pengedaran (fail pemasangan) dan sistem, apabila melancarkan aplikasi, menyusunnya sebelum melancarkannya. Dalam erti kata lain, fail telah dibungkus, semasa aplikasi sedang berjalan, fail telah dibongkar dan dilancarkan.

Kini, dalam Android 5.0, semua aplikasi dipasang dalam bentuk tersusun dan dinyahzip. Ini menyebabkan aplikasi menggunakan lebih banyak ruang tetapi berjalan lebih pantas!

2. Apakah yang membawa kepada ini?

  1. Hak akses diberikan kepada aplikasi SEMASA PEMASANGAN!
  2. Pengguna mempunyai hak untuk menetapkan haknya sendiri aplikasi tertentu semasa pemasangan.
  3. Pengguna boleh menukar kebenaran aplikasi. Contohnya, jika anda mempercayai program, anda boleh membenarkannya mengedit fail pada kad memori luaran.

SAYA NAK KEMASKINI ANDROID KE VERSI 5.0 untuk menyelesaikan masalah!

Jika saya mengemas kini versi RASMI sistem pengendalian, SAYA AKAN KEKALKAN WARANTI!

Tetapi saya memerlukan versi Android untuk Rusia (khusus untuknya, dan bukan untuk negara lain), supaya tidak menderita dengan perkataan Inggeris dalam antara muka.

Saya akan cuba mencari dia.

Program rasmi Sokongan Samsung telefon Kies mengatakan telefon saya dikemas kini kepada versi terkini Oleh.

Saya tidak menemui sebarang kemas kini Android rasmi (untuk wilayah kami) di tapak web rasmi.

Saya menemui maklumat di forum bahawa Google mengeluarkan versi perisian tegar untuk Rusia pada Januari 2015. Tetapi ia dilaksanakan dengan sangat perlahan pada peranti pelanggan.

Dengan cara ini, saya boleh menunggu sehingga peranti saya menerima mesej bahawa terdapat kemas kini perisian. Selepas itu saya boleh mengemas kini Android.

Anda boleh menyalakan perisian tegar baharu sendiri tanpa menunggu jemputan.

Cara yang BEKERJA untuk mengedit fail (menggunakan komputer) pada telefon dengan Android 4.4 Enforcement.

Selepas saya memutuskan untuk menunggu kemas kini rasmi, mula membelek-belek sistem fail di telefon. Dan saya menemui sesuatu yang pelik:

  1. Anda mempunyai hak untuk mengedit folder - alih, namakan semula!
  2. Anda boleh memadam fail, mengalihkannya ke folder lain (sebagai salinan)
  3. Tiada hak untuk mengedit fail!

Dan saya segera menghasilkan cara yang berfungsi untuk menukar fail menggunakan salinan perantaraan! Analisis sistem Bertindak...

Iaitu, apa yang kita lakukan:

  1. Membuka fail untuk diedit
  2. Simpannya pada komputer anda (ia tidak membenarkan anda menyimpan salinan pada telefon anda!)
  3. memadam fail dari telefon
  4. tulis semula salinan ke lokasi fail yang dipadam!

Dengan cara ini kita mendapat fail yang diubah suai (menggunakan salinan perantaraan)!

Begitulah keadaannya, kawan-kawan!

Jika ada berita, saya akan siarkan segera!

Dan sekarang selamat tinggal, jumpa anda tidak lama lagi!