Soru & Cevap

Downloadmaganer ile indirdiğim dosyayı nasıl taşıyabilirim?

05.03.2020 - 07:50

Android Studio ile küçük bir uygulama yaptım güncelleme apk dosyasını Downloadmanager ile serverden indiriyorum fakat Download klasörüne inmiyor sanırım Temp içine iniyor indirilenlerde görüyorum ama ne taşıyabiliyorum nede silebiliyorum nasıl yapabilirim...

NOT: cihazdan manuel olarak taşıyabiliyor veya silebiliyorum demek istediğim Java kodu ile yapamıyorum..

4 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user f.erenyucal
f.erenyucal
17.02.2023 - 12:31

Merhabalar Murat Bey. İndirilen APK dosyasının temp klasörüne inmesi, Android cihazlarda standart bir davranıştır. Bu dosyanın doğrudan indirilen konumuna kaydedilmesi yerine, temp klasörüne kaydedilmesinin nedeni, indirme işlemi sırasında cihazda oluşabilecek kesintiler veya hatalar nedeniyle dosyanın bütünlüğünü korumaktır. Bu nedenle, Android'de bir indirme yöneticisi kullanarak indirilen bir dosyayı doğrudan hedef konuma taşımak mümkün değildir

Bununla birlikte, dosyayı hedef konuma taşıyabileceğiniz birkaç seçenek var:

  1. DownloadManager ile indirme işlemi tamamlandıktan sonra, dosyanın kaydedildiği temp klasöründen alınarak hedef konuma taşınabilir. Bu işlemi aşağıdaki örnek kodla gerçekleştirebilirsiniz:
public void onDownloadComplete(Uri uri) {
    String fileName = getFileName(uri);
    File tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
    File destFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "myapp.apk");
    boolean success = tempFile.renameTo(destFile);
    if (success) {

    } else {
      
    }
}

private String getFileName(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
    cursor.moveToFirst();
    String name = cursor.getString(nameIndex);
    cursor.close();
    return name;
}

 

  1. Dosyayı taşımadan önce, kullanıcıya dosyanın kaydedileceği konumu seçme seçeneği sunabilirsiniz. Bu, dosyanın kaydedileceği konumu önceden belirlemek isteyen kullanıcılar için kullanışlı bir seçenektir. Aşağıdaki örnek kod, kullanıcıya bir dosya tarayıcısı açarak dosya konumunu seçme seçeneği sunar:
public void onDownloadComplete(Uri uri) {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    startActivityForResult(intent, REQUEST_CODE_OPEN_DIRECTORY);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
    if (requestCode == REQUEST_CODE_OPEN_DIRECTORY && resultCode == Activity.RESULT_OK) {
        Uri treeUri = resultData.getData();
        DocumentFile tree = DocumentFile.fromTreeUri(this, treeUri);
        String fileName = getFileName(uri);
        DocumentFile file = tree.createFile("application/vnd.android.package-archive", fileName);
        try (InputStream in = getContentResolver().openInputStream(uri)) {
            try (OutputStream out = getContentResolver().openOutputStream(file.getUri())) {
                byte[] buffer = new byte[8192];
                int len;
                while ((len = in.read(buffer)) != -1) {
                    out.write(buffer, 0, len);
                }
            }
        } catch (IOException e) {
            // Dosya taşınamadı
        }
    }
}

private String getFileName(Uri uri)