9

Ứng dụng Android của tôi có tùy chọn nâng cấp lên phiên bản mới hơn, APK phiên bản mới hơn tôi giữ cho nó có sẵn dưới một đường dẫn trong sdcard. Khi nhấp vào tùy chọn Nâng cấp, tôi gọi phương thức sau.Trình cài đặt gói Android - cách nhận được kết quả hoạt động "Mở" và "Xong" và hoạt động cả hai?

public static void launchInstaller(Activity act, String apkPath) 
    { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     act.startActivityForResult(intent, 0); 
    } 

Lý do tôi bao gồm FLAG_ACTIVITY_NEW_TASK, là bởi vì, sau khi nâng cấp, tôi muốn có "Open" & "Done" tùy chọn, mà không được hiển thị nếu tôi không sử dụng lá cờ này.

Khi mã trên khởi chạy trình cài đặt gói, nó có hai tùy chọn OK & Hủy, khi người dùng nhấn Hủy, tôi muốn biết người dùng đã hủy nó. Nhưng tôi không thể biết bởi vì onActivityResult được gọi là trước khi trưởng thành. Tôi đến một lý do tại sao điều đó xảy ra sau khi đọc các bài viết sau đây.

Android - startActivityForResult immediately triggering onActivityResult

onActivityResult() called prematurely

Họ hỏi tôi để đảm bảo rằng mục đích? Tôi đang sử dụng để khởi động các hoạt động không có FLAG_ACTIVITY_NEW_TASK đặt trên nó. Xem ở đây:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

Trong lưu ý đặc biệt: "Cờ này không thể được sử dụng khi người gọi là yêu cầu một kết quả từ hoạt động được đưa ra."

Nếu hoạt động này đã được đưa ra như là một phần của một nhiệm vụ mới sau đó Android ngay lập tức sẽ gọi onActivityResult() với RESULT_CANCELED vì một hoạt động trong một nhiệm vụ không thể trả lại kết quả cho công việc khác, chỉ hoạt động trong cùng một nhiệm vụ có thể làm như vậy.

Nhưng trong trường hợp của tôi, tôi không thể xóa FLAG_ACTIVITY_NEW_TASK, vì nếu không tôi sẽ không nhận được tùy chọn "Mở" và "Xong" khi nâng cấp thành công.

Có ai gặp phải vấn đề tương tự không? Vui lòng giúp tôi, vì nó khiến tôi khốn khổ.

+0

Tôi có cùng một vấn đề ... bạn có nhận được bất kỳ độ phân giải cho điều này? – Himanshu

Trả lời

3

Bạn nên sử dụng mục đích phát sóng đã thêm gói. Tạo bộ thu phát sóng nghe package added. Nếu gói được thêm bằng gói của bạn, người dùng xác nhận cài đặt nếu không bỏ qua quá trình cài đặt. Nếu bạn hỏi những gì loại bổ sung có thể được trả lại bởi android, android trả về EXTRA_UID về gói. Phương thức của PackageManager chuyển đổi uid thành gói. (GetPackagesForUid (int uid) trả về mảng String nhưng nó thường trả về một mục trong mảng theo chiều dài mảng ngắn thường bằng 1.

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