2011-01-03 37 views
8

có thể lấy tên tệp trình cài đặt được lưu trữ trên/sdcard/ tải xuống /? Tôi muốn nhận được từ ứng dụng, tên tập tin apk đã cài đặt nó. Có một cách dễ dàng để làm điều đó đặc biệt với ứng dụng phi thị trường?Android: Cách lấy tên tệp trình cài đặt theo chương trình?

+0

ý bạn là "tên tệp trình cài đặt" là gì? Tên của gói ứng dụng? Nếu có, tại sao bạn muốn nó? Vui lòng thêm các chi tiết khác. –

+0

Có, tôi muốn nhận tên của apk được lưu trữ trên thẻ sd. Tôi đã tạo tệp APK và lưu trữ nó trên máy chủ, khi ai đó muốn tải xuống, máy chủ tạo tệp có tên duy nhất, ví dụ: "application00086.apk". Câu hỏi đặt ra là: cách lấy tên tệp duy nhất này từ ứng dụng của tôi sau khi cài đặt được lưu trữ trong thư mục:/data/app/Tôi tìm thấy phương thức thú vị: getInstallerPackageName nhưng phương thức này chỉ trả về tên gói cài đặt và chỉ cho các ứng dụng được phân phối trên Android Market, muốn tải xuống tệp trình cài đặt NAME và không muốn phân phối ứng dụng của tôi trong Market. – Wolfie

+0

@Wolfie: Tôi phải đối mặt với cùng một vấn đề với bạn. Bạn đã có giải pháp cho việc này chưa. Cảm ơn nhiều ! – hoang8f

Trả lời

2

Cách tốt hơn chắc chắn là bao gồm chuỗi phiên bản trong tệp kê khai. Đây thực sự là phương pháp đáng tin cậy (và chuyên nghiệp) duy nhất. Android không lưu tên của tệp chứa APK ở bất kỳ đâu, vì vậy không có cách nào bạn có thể tải tệp đó. Về mặt lý thuyết, bạn có thể xây dựng một cái gì đó bằng cách sử dụng FileObserver, đã xem tệp được tạo trong các thư mục nhất định và mỗi lần tệp được tạo bằng phần mở rộng .apk bạn có thể mở tệp, trích xuất tệp kê khai, tìm tên gói của APK và sau đó lưu trữ tệp này cùng với tên tệp trong một số lưu trữ liên tục. Sau đó, khi bạn cần lấy thông tin về phiên bản, bạn có thể tìm trong bộ lưu trữ liên tục để lấy tên tệp khớp với tên gói bạn cần.

Tất nhiên, điều này sẽ chỉ hoạt động nếu ứng dụng của bạn được cài đặt trên thiết bị trước các tệp APK khác đã được tải xuống/cài đặt. Điều này sẽ không hoạt động để tìm ra tên tệp của ứng dụng của riêng bạn.

1

Hmm, tôi không chắc chắn những gì bạn có ý nghĩa bởi sdcard hoặc tải thư mục, nhưng bạn có thể có được con đường apk trong hệ thống thư mục/data:

dòng lệnh:

$ adb shell pm list packages | grep mk.trelloapp 
package:mk.trelloapp 
$ adb shell pm path mk.trelloapp 
package:/data/app/mk.trelloapp-1/base.apk 

hoặc từ bạn android ứng dụng mã số: (chỉ cần chạy quá trình)

 Process exec = Runtime.getRuntime().exec("pm path mk.trelloapp"); 

     exec.waitFor(); 

     InputStream inputStream = exec.getInputStream(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 

     StringBuilder builder = new StringBuilder(); 
     String line = null; 
     while((line = br.readLine()) != null) { 
      builder.append(line); 
     } 

     String commandOutput = builder.toString(); 

mã ở trên chỉ đơn giản là sẽ cho bạn string chứa "gói: /data/app/mk.trelloapp-1/base.apk"

Khi bạn lấy đường dẫn/thư mục dữ liệu, bạn có thể tìm kiếm cùng một tệp tương tự trong các thư mục khác (giả sử nó không bị xóa), vì gói android được sao chép vào/thư mục dữ liệu trong khi instalation.

+0

Điều này không hữu ích. OP muốn có thể lấy tên tệp ban đầu của tệp APK đã được tải xuống vì số phiên bản ứng dụng của anh được mã hóa như một phần của tên tệp đó. Đường dẫn APK tới '/ data' không bao gồm thông tin này vì nó chỉ sử dụng tên gói. –

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