Soru SD karta yazma izni


Uygulamamın uygulama DB'sini SD karta arşivlemesini istiyorum. Kodumda dizinin olup olmadığını kontrol ederim canWrite() Varsa ve değilse IOException. Bu özel örnekte, db dosyasını SD karttaki kök dizine kopyalamaya çalışıyorum, ancak IOException. Yazabilmek için bir klasördeki / dosyadaki izni nasıl değiştirebilirim?


76
2018-01-23 02:29


Menşei




Cevaplar:


SD Kart dizininin doğru /sdcard ama bunu kodlamak zor olmamalı. Bunun yerine, Environment.getExternalStorageDirectory() dizini almak için:

File sdDir = Environment.getExternalStorageDirectory();

Henüz yapmadıysanız, uygulamanızın Manifest'inize aşağıdaki satırı ekleyerek SD Kart'a yazmak için doğru izni vermeniz gerekir:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

203
2018-01-23 05:56



Teşekkürler ... Kodumu önerinize göre değiştireceğim. Ancak şu anda sabit kodlanmış ve izin dosyasında izin yok ama yine de sd kartına kaydetmeme izin veriyor. izin setine sahip olarak neden kurtarabilirim? - bugzy
@ user244190 - benim tahminim telefonunuzun Android 1.5 olduğunu. WRITE_EXTERNAL_STORAGE 1.6'da tanıtıldı, bu yüzden ileriye dönük olmasını istiyorsanız, uygulamanıza eklemeniz gerekir. - Dave Webb
Yakaladım. Teşekkürler... - bugzy
@DaveWebb: lütfen sorumu buraya bakın:stackoverflow.com/questions/9351904/... - Saher Ahwal
Kimse cevap vermedi ve neden çalışmadığını bilmiyorum. - Saher Ahwal


Dave'in cevabındaki önerilen teknik kesinlikle iyi bir tasarım uygulamasıdır ve evet sonuçta harici depolama birimine erişmek için AndroidManifest.xml dosyasında gerekli izinler ayarlanmalıdır.

Ancak, Mono-esque (çoğu olmasa bile) “manifest opsiyonlarını” eklemenin en önemli yolu, aktiviteyi (veya hizmeti) uygulayan sınıfın nitelikleridir.

Visual Studio Mono eklentisi otomatik olarak tezahür ettiriyor, bu yüzden en iyi değil elle kurcalamak (başka bir seçenek olmadığı durumlarda da eminim).

Örneğin:

[Activity(Label="MonoDroid App", MainLauncher=true, Permission="android.permission.WRITE_EXTERNAL_STORAGE")]
public class MonoActivity : Activity
{
  protected override void OnCreate(Bundle bindle)
  {
    base.OnCreate(bindle);
  }
}

1
2017-08-22 18:46



Aslında, bu WRITE_EXTERNAL_STORAGE ayarının bir kullanıcı izni olduğunu şimdi görüyorum ve yukarıdaki gibi ayarlanmışsa, bildirim dosyasında kullanıcı izni olmaksızın bir etkinlik ayarı (android: izin) olarak görünecektir. Oh, sadece hatırladım, kullanıcı izinleri kullanıcısını proje özelliklerini VS (tüm izinlerin bir onay kutusu listesi) olarak ayarlayın. - samsara
Aslında "kullanım izni" etiketleridir, "kullanıcı izni" değildir, ancak diğer her şey doğrudur. - samsara
Mutlaka gerekli olan bir şey, (Build.VERSION.SDK_INT> = 19) {MainActivity.get (). GetExternalFilesDirs (null); } // SD / Android / data / your.package.name adresine erişmek için // Paketin kendiniz oluşturmaya çalışmayın. Bu çağrı, mkdir veya mkdirlerin çalışmamasıyla sonuçlanır. - pstorli