2013-04-17 41 views
14

Tôi đang xây dựng một dự án thư viện Android cần một số tài nguyên tĩnh (hình ảnh/xml và v.v ...) trong nội bộ.cách truy cập tài nguyên trong dự án thư viện android

Sau đó, tôi tự hỏi nơi tôi có thể đặt các tài nguyên này và cách truy cập chúng?

Vì tôi đã đặt các tài nguyên trong thư mục assets. Và tôi sử dụng AssetManager để truy cập các nguồn lực:

public class DataProvider { 
    byte[] getDrawableData(int num) { 
     AssetManager am = Resources.getSystem().getAssets(); 
     InputStream is = null; 
     try { 
      is = am.open("t.jpg"); 
     } catch (IOException e) { 
      return "".getBytes(); 
     } 
     if (is != null) { 
      Drawable dw = Drawable.createFromStream(is, null); 
      Bitmap bm = ((BitmapDrawable) dw).getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      return stream.toByteArray(); 
     } 

     return "".getBytes(); 
    } 
} 

Tuy nhiên tôi đã nhận lỗi: W/System.err(19583): java.io.FileNotFoundException: t.jpg

vấn đề là gì?


Vì dự án thư viện không hỗ trợ tài sản thô. Sau đó, Có vẻ như tôi phải đặt các resurces dưới thư mục res.

Nhưng tôi đã cố gắng sử dụng phương pháp Resources.getSystem().getResources().... không thể có được những gì tôi muốn. Và mọi người nói rằng phương pháp này chỉ có thể nhận được các tài nguyên ở mức hệ thống hơn là các tài nguyên mức ứng dụng.

Nếu đây là sự thật. Điều đó có nghĩa là tôi phải giữ một tham chiếu của đối tượng Context ở bất kỳ nơi nào tôi muốn nhận bất kỳ tài nguyên nào không?

+0

bạn đã kiểm tra hoàn toàn liên kết mà tôi đã cung cấp làm giải pháp chưa. Điều đó nói rằng "Có bạn có thể nếu bạn biết tên gói của thư viện của bạn" và có một giải pháp làm việc. –

+0

Tôi đã đọc bài đăng. Nhưng tôi không thể truy cập đối tượng 'context', vì vậy tôi không thể gọi' getResources() .... '. – hguser

+0

Tôi muốn xác nhận nơi lớp DataProvider cư trú? trong dự án Thư viện hoặc trong dự án ứng dụng –

Trả lời

7

Sau đó, tôi tự hỏi mình có thể đặt các tài nguyên này ở đâu và cách truy cập chúng?

Từ

dự án Thư viện của Android Doc không thể bao gồm tài sản thô

Các công cụ này không hỗ trợ việc sử dụng các tập tin tài sản thô (được lưu trong tài sản/thư mục) trong một dự án thư viện. Bất kỳ tài nguyên nội dung nào được ứng dụng sử dụng phải được lưu trữ trong nội dung/thư mục của chính dự án ứng dụng. Tuy nhiên, các tệp tài nguyên được lưu trong thư mục res/được hỗ trợ.

Documents Reference Link:LibraryProjects

Giải pháp:How to access resource files saved in res/ directory of library project from application project

Lưu ý: Nếu bạn muốn truy cập tài nguyên từ Dự án Thư viện bản thân thêm các nguồn lực để res/ directory không assets. Bởi vì các tệp trong nội dung sẽ không được đi kèm với tệp .jar. Bạn có thể truy cập nó như bình thường bằng cách sử dụng tham chiếu được tạo trong tệp R.java.

Ex: Để truy cập vào một hình ảnh từ việc sử dụng drawable

R.drawable.image_name 

Liệu nó có nghĩa là tôi phải giữ một tham chiếu của đối tượng Context bất cứ nơi nào tôi muốn nhận được bất kỳ tài nguyên?

Thật bạn nên giữ một tham chiếu đến ngữ cảnh để truy cập tài nguyên

Cập nhật:

Bây giờ dự án thư viện Android có thể được tạo ra như aar (Android Archive) tập tin cho phép bạn bó tài nguyên các tệp cần thiết cho dự án thư viện thay vì tệp jar cũ (Java Archive) chỉ cho phép bạn gộp các lớp Java.

+0

Sankar: Bạn nói rằng 'Dự án thư viện không thể bao gồm nội dung thô'. Nhưng tôi đã sử dụng một số thư viện phần ba người gói các lớp và thư mục tài sản với nhau. Vấn đề là gì? – hguser

+0

tôi có thể biết thư viện của bên thứ ba đó là gì không? –

+0

Nó là một sdk android. Xem ảnh chụp màn hình này: http: //i.imgur.com/7I6aq1D.png. – hguser

0

Hoặc bạn có thể sử dụng Thư mục được Liên kết trong Eclipse và liên kết thư mục nội dung của bạn với dự án mới của bạn.

+0

điều này giúp có thể trong nhật thực và không phải trong Android Studio mà nên được ưa thích bây giờ một ngày. Nhưng tôi không tin rằng điều này sẽ giúp trong nhật thực cũng như các thư mục liên kết không liên kết khi dự án được xây dựng –

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