2010-04-21 51 views
9

Có cách nào để nhận thông báo hệ thống khi ứng dụng đã được gỡ cài đặt không?Phát hiện xem ứng dụng đã được gỡ cài đặt

Tôi muốn duy trì bảng thông tin của tất cả khách hàng hiện đang sử dụng ứng dụng của tôi. Tuy nhiên, điều đó dường như là không thể nếu không có cách nào để phát hiện sự kiện này.

Giải pháp đầu tiên tôi có thể nghĩ là có một dịch vụ luôn chạy trong nền nghe cho android.intent.action.PACKAGE_REMOVED. Nhưng sau đó dịch vụ đó sẽ bị giết sau khi quá trình gỡ cài đặt đã kết thúc, hoặc nó sẽ bị dừng lại ngay trước khi quá trình đã khởi động? Ngoài ra ngay cả khi đây là một giải pháp nó có tiềm năng để đưa ra rất nhiều người khi họ nhận ra rằng một phần của ứng dụng đang chạy trong nền.

Mọi đề xuất? Cảm ơn!

+0

Bạn có thể tìm thấy giải pháp nào cho sự cố không? –

Trả lời

6

Bạn có thể chỉ cần thực hiện theo cách khác quanh và duy trì một bảng người dùng đang tích cực sử dụng ứng dụng của bạn. Chỉ cần gọi một webservice tại một điểm trong chương trình cho thấy nó đang hoạt động. Nếu một ứng dụng không được sử dụng trong một thời gian nhất định thì nó sẽ không hoạt động.

6

Các documentation for the PACKAGE_REMOVED action nói như sau:

Các gói phần mềm đang được gỡ bỏ cài đặt không không nhận Ý định này.

Vì vậy, bạn có thể theo dõi các ứng dụng khác đang được gỡ cài đặt nhưng không phải của riêng bạn.

Vì vậy, có thể bạn sẽ cần theo dõi ai vẫn đang sử dụng ứng dụng của bạn, không phải ai đã ngừng sử dụng ứng dụng đó. Nếu bạn không muốn sử dụng máy chủ của riêng mình, bạn có thể sử dụng dịch vụ miễn phí như Flurry.

+1

Ai đã sử dụng ứng dụng của tôi gần đây không phải là phép đo chính xác và điều này không đáp ứng được nhu cầu của tôi. Tôi đang sử dụng GAE nên tôi không lo lắng về phía máy chủ. – mobilekid

+0

Làm thế nào để bạn theo dõi quá trình gỡ cài đặt ứng dụng bằng loạt sự cố? Đây là chính xác những gì tôi cần nhưng không thể thực sự tìm hiểu làm thế nào để làm điều này. – mkorszun

1

Từ tài liệu Android, ứng dụng gỡ bỏ cài đặt bởi người dùng không thể không nhận được

Intent.ACTION_PACKAGE_REMOVE 

Nhưng chúng ta có thể sử dụng phương pháp khác để thực hiện tính năng này. Chúng ta đều biết rằng có một thư mục có tên với tên gói của bạn trong thư mục/data/data sau khi ứng dụng của bạn được người dùng cài đặt. Nếu ứng dụng của bạn bị người dùng gỡ cài đặt, thư mục gốc của ứng dụng của bạn (/data/data/com.example.yourappname) sẽ bị hệ thống xóa. Hành động xóa sẽ xảy ra ngay lập tức khi người dùng nhấp vào "gỡ cài đặt" và thư mục sẽ bị xóa bởi hệ thống quản lý gói khung.

Vì vậy, chúng tôi có thể theo dõi sự tồn tại của thư mục dữ liệu ứng dụng của bạn (thường là /data/data/com.example.yourappname) để phát hiện xem ứng dụng của bạn đã được người dùng gỡ cài đặt hay chưa.

Để theo dõi thư mục này, chúng tôi phải chia rẽ một quy trình tách rời khỏi JNI. Trong quy trình mới này, chúng tôi có thể sử dụng hệ thống Linux api inotify (7) hoặc truy cập (3) để xác định sự tồn tại của thư mục dữ liệu của ứng dụng.

Here là một triển khai khả thi. Nhưng nó có vấn đề về quyền khi cố gắng gửi ý định khởi động trình duyệt hệ thống trên thiết bị Android phiên bản cao. Tôi không có ý tưởng làm thế nào để bỏ qua điều này. Tuy nhiên, ví dụ trên là đủ cho câu hỏi của bạn.

Hy vọng điều đó sẽ hữu ích!

0

Android không cung cấp chức năng sẵn có để theo dõi gỡ cài đặt ứng dụng.

Thông báo có thể được sử dụng làm cách thay thế để theo dõi gỡ cài đặt ứng dụng. Đối với thông báo gửi này trên ứng dụng và theo dõi trạng thái của thông báo. Đếm số thông báo chưa được gửi cho một khoảng thời gian cụ thể. Nếu trạng thái của thông báo chưa được gửi không thay đổi trong khoảng thời gian cụ thể đó, thì hãy xem xét rằng ứng dụng đã được gỡ cài đặt khỏi thiết bị.

Ví dụ: tôi đã sử dụng tập lệnh cron chạy 3 ngày một lần và kiểm tra trạng thái của 10 thông báo mới nhất được gửi tới thiết bị (2 thông báo được gửi trong một ngày). Nếu tất cả 10 thông báo này có trạng thái "chưa được phân phối" thì ứng dụng sẽ bị gỡ cài đặt khỏi thiết bị.

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