2015-07-08 13 views
5

Tôi đang viết một ứng dụng bằng cách sử dụng cơ sở dữ liệu SQLite. Tôi đã được mã hóa để sao lưu cơ sở dữ liệu SQLite của mình. Bây giờ tôi muốn có thể khôi phục cơ sở dữ liệu ứng dụng của tôi từ một bản sao như vậy. Tôi đang sử dụng hộp thoại "Mở từ" trên thiết bị Android. Tôi thấy tệp nếu tôi sử dụng các nhà cung cấp nội dung khác trong danh sách, chẳng hạn như ví dụ: "Truyền tệp qua Bluetooth"! Nhưng tôi không thấy nó nếu tôi cố gắng sử dụng tùy chọn "Tải xuống".Android: loại mime nào được sử dụng nếu tôi muốn xem/chọn cơ sở dữ liệu SQLite từ thư mục Tải xuống?

Tôi đã sao chép cơ sở dữ liệu SQLite trong thư mục tải xuống của mình. Tôi đã cố gắng sử dụng fileIntent.setType ("/").

Cảm ơn.

Trả lời

0

Tôi không có câu trả lời hoàn chỉnh. Thay vào đó, tôi sẽ đưa ra một vài ý tưởng.

Tôi không chắc chắn ý bạn là gì bởi hộp thoại "Mở từ". Tôi giả sử bạn có nghĩa là hộp thoại "Chooser", trong đó cho thấy các biểu tượng của ứng dụng có thể xử lý ý định.

Nhiều ứng dụng Android sử dụng MimeTypeMap để liên kết các tiện ích mở rộng tệp và MIME. Không có phương thức để lặp qua MimeTypeMap để xem tất cả ánh xạ của nó là gì. Tôi khá tự tin these are the mappings. Không có mục nào trong danh sách cho SQLite. Một kiểu MIME thông thường cho SQLite sẽ là "application/x-sqlite3".

Trong bài đăng của bạn, bạn đã bao gồm fileIntent.setType("/"). Tôi đoán bạn thực sự gõ fileIntent.setType("*/*"), và bởi vì nó không được trích dẫn các định dạng ăn hai ngôi sao.

Vì bạn có thể cung cấp bất kỳ tiện ích mở rộng nào bạn muốn cho tệp cơ sở dữ liệu SQLite của mình, bạn có thể linh hoạt trong việc chọn một tiện ích tạo kết quả bạn muốn. Tôi đoán bạn muốn tìm thứ gì đó sẽ không chỉ khiến Tải xuống được bao gồm trong hộp thoại chooser, mà còn loại trừ các ứng dụng không mong muốn. Có thể bạn sẽ phải thử nghiệm sau khi xem danh sách ánh xạ được hỗ trợ bởi MimeTypeMap.

+0

Cảm ơn, qbix, đã dành thời gian để nhìn vào câu hỏi của tôi. Vâng, tôi có nghĩa là ngôi sao chém sao cho loại MIME. Và đó là một trong những quyền sử dụng, tôi đã viết một số mã gỡ lỗi để kiểm tra các loại tập tin SQLite Mime và nó có hiệu quả ngôi sao cắt giảm ngôi sao. –

+0

Và hộp thoại "Mở từ" là hộp thoại cho phép bạn chọn từ "Gần đây", "Tải xuống", thẻ SD bên ngoài, Bộ nhớ trong hoặc sử dụng từ danh sách ứng dụng. Tôi chỉ có thể chọn một tệp bằng cách sử dụng một số ứng dụng được liệt kê.Ví dụ, tôi có thể sử dụng ES File Explorer hoặc Dropbox. –

11

Đó là application/x-sqlite3. Tôi sử dụng điều này trong ứng dụng của riêng tôi.

More info here.

Dưới đây là một dụ về cách tôi sử dụng nó:

File backupDB = ...; 

//Uri uri = Uri.fromFile(backupDB); //From Android 7, this line results in a FileUriExposedException. Therefore, we must use MyFileProvider instead... 
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".com.example.myapp.myfileprovider", backupDB); 

Intent newIntent = new Intent(Intent.ACTION_VIEW); 
newIntent.setDataAndType(uri, "application/x-sqlite3"); 
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
newIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

startActivity(newIntent); 

Để hoàn chỉnh, đây là MyFileProvider.java tôi lớp:

package com.example.myapp; 

import android.support.v4.content.FileProvider; 

public class MyFileProvider extends FileProvider { 
} 

Và đây là làm thế nào để khai báo nó trong manifest:

<provider 
    android:name=".MyFileProvider" 
    android:authorities="${applicationId}.com.example.myapp.myfileprovider" 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/my_file_provider_paths"/> 
</provider> 

Và, cuối cùng, đây là tôi my_file_provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-path name="external_files" path="."/> 
</paths> 
+0

thư mục luôn mở của nó không phải là tệp. ** db **, vui lòng trợ giúp. –

+0

Tôi vừa sửa câu trả lời của mình bằng một ví dụ về cách tôi sử dụng nó. Hy vọng rằng, điều đó sẽ giúp bạn. :-) –

Các vấn đề liên quan