Cách bật khóa tác vụ trong thiết bị sản xuất Android 5.0


12

Câu hỏi StackOverflow này khám phá cách bật ứng dụng chủ sở hữu thiết bị và do đó, chế độ kiosk, trong bản xem trước của nhà phát triển Android L. Vì phương pháp này yêu cầu xây dựng Androiddebug cho người dùng, root thiết bị và sao chép tệp XML vào hệ thống tệp gốc, nên nó có vẻ không phù hợp để triển khai hàng loạt thiết bị Android chức năng trong một công ty.

Các ứng dụng chủ sở hữu thiết bị sẽ được cài đặt trên các thiết bị Android L sản xuất như thế nào?


Bạn đã giải quyết vấn đề?
KOTIOS


Cảm ơn @Spynet - đó dường như là bản tóm tắt đầy đủ nhất về giải pháp.
Adrian Cox

1
hãy xem hướng dẫn tốt ở đây với src: objectpartners.com/2014/11/04/ Khăn
Hayden Thring

Câu trả lời:


14

( Chỉnh sửa: Cập nhật sau một số thử nghiệm nữa)

Kiểm tra các tài liệu mới nhất .

Tính năng này dường như được gọi là Ghim màn hình ngay bây giờ và Ứng dụng không phải là chủ sở hữu thiết bị. Nếu chủ sở hữu thiết bị không được đặt, người dùng sẽ được nhắc chấp nhận. Nhưng có vấn đề với điều này để sử dụng kiosk, được đề cập dưới đây.

Có hai cách để kích hoạt ghim màn hình:

Thủ công: Người dùng có thể kích hoạt ghim màn hình trong Cài đặt> Bảo mật> Ghim màn hình và chọn các tác vụ họ muốn ghim bằng cách chạm vào biểu tượng ghim màu xanh lá cây trong màn hình lõm. Lập trình: Để kích hoạt ghim màn hình theo chương trình, hãy gọi startLockTask () từ ứng dụng của bạn. Nếu ứng dụng yêu cầu không phải là chủ sở hữu thiết bị, người dùng sẽ được nhắc xác nhận. Ứng dụng chủ sở hữu thiết bị có thể gọi phương thức setLockTaskPackages () để cho phép các ứng dụng có thể được ghim mà không cần bước xác nhận của người dùng.

Nếu bạn kích hoạt ghim màn hình theo chương trình (Ứng dụng không phải chủ sở hữu thiết bị) hoặc trên thiết bị bằng cách sử dụng ghim trong phần lõm, bạn sẽ có hành vi sau:

Một hộp thoại xuất hiện hỏi người dùng nếu họ muốn kích hoạt ghim màn hình và nếu họ muốn yêu cầu mật khẩu để thoát. Nếu họ nhấn có, thanh trạng thái và thông báo sẽ biến mất, các nút quay lại, home và recents KHÔNG biến mất. Chạm vào nhà hoặc lõm làm cho bánh mì nướng xuất hiện thông báo cho người dùng cách thoát ghim màn hình.

Sau đó, người dùng có thể giữ lại và lùi lại để thoát khỏi ghim màn hình. Nếu người dùng được chọn yêu cầu mật khẩu, họ sẽ bị đá thẳng vào màn hình khóa. Hành vi này có nghĩa là nó không phù hợp cho một kiosk imo. Vì nó quá dễ dàng cho người dùng kiosk cuối cùng nhìn vào màn hình khóa.

Để có chế độ kiosk phù hợp, chúng ta cần đặt chủ sở hữu thiết bị. Tài liệu của Google cho biết bạn cần làm điều này với NFC:

Để triển khai và kích hoạt chủ sở hữu thiết bị, bạn phải thực hiện chuyển dữ liệu NFC từ ứng dụng lập trình sang thiết bị trong khi thiết bị ở trạng thái chưa được xác minh.

Sử dụng NFC để thực hiện việc này có vẻ hơi phức tạp (nếu thiết bị không có NFC thì sao?). Tôi chưa điều tra vấn đề này vì vậy nếu có ai có thể cung cấp thông tin về cách bạn thiết lập chủ sở hữu thiết bị bằng NFC? Mà bây giờ trở thành điểm chính của câu hỏi của bạn. (tức là đặt chủ sở hữu thiết bị trên thiết bị chưa root)

Nhưng để xác nhận hành vi như mong đợi nếu bạn root thiết bị, bạn có thể đặt chủ sở hữu thiết bị theo hướng dẫn trước đó của Google (thêm device_owner.xml) như tôi đã đề cập ở đây

Giờ đây, bạn có thể khóa Ứng dụng đúng cách, không có hộp thoại nào xuất hiện để người dùng chấp nhận, khi bật nút lõm và nút home biến mất và người dùng không thể rời khỏi Ứng dụng trừ khi Ứng dụng của bạn tự mở. Một chế độ kiosk thích hợp. Tôi đã thử nghiệm điều này trên Nexus 7 2013 với bản dựng Lollipop mới nhất.

Đoạn mã sau bật khóa:

mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);

if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
    Log.d(TAG, "isDeviceOwnerApp: YES");
    String[] packages = {this.getPackageName()};
    mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
    Log.d(TAG, "isDeviceOwnerApp: NO");
}

if (mDPM.isLockTaskPermitted(this.getPackageName())) {
    Log.d(TAG, "isLockTaskPermitted: ALLOWED");
    startLockTask();
} else {
    Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}

Tôi nghĩ rằng đây là câu trả lời tốt nhất có thể có sẵn tại thời điểm này. Bước NFC vẫn còn là một bí ẩn, nhưng là một câu hỏi hẹp hơn nhiều.
Adrian Cox

Tôi đã cố gắng để bước NFC hoạt động nhưng không có thành công, tôi bắt đầu một câu hỏi về vấn đề này tại đây . Ngoài ra, có một yêu cầu tính năng với Google để cải thiện việc ghim màn hình để sử dụng kiosk tại đây
tagy22

1

Tôi không thể nhận xét về một câu trả lời hơi phiền toái nhưng bổ sung cho câu trả lời của tagy22 mà bạn có thể sử dụng dpmđể đặt chủ sở hữu thiết bị. Thêm chi tiết tại đây .


1
dpmsẽ không hoàn thành công việc nếu một tài khoản (như tài khoản Google) được đặt trong thiết bị.
Firelord

NFC sẽ trong trường hợp đó mặc dù? Tôi đã có ấn tượng rằng chủ sở hữu thiết bị cần được đặt trước khi tài khoản được thêm thời gian.
Troy Patrick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.