2010-04-05 32 views

Trả lời

3

Nếu bạn có một dịch vụ mà nó hoạt động bạn có thể nắm bắt những sự kiện với

registerReceiver(new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    // do something 
    } 
}, new IntentFilter(Intent.ACTION_SCREEN_ON)); 

Tuy nhiên điều này phụ thuộc vào việc có một dịch vụ vĩnh viễn chạy mà tôi đã gần đây đã học được khuyến khích vì nó là giòn (hệ điều hành thích đóng chúng) và sử dụng tài nguyên vĩnh viễn.

Đáng thất vọng, có vẻ như không thể có người nhận trong tệp kê khai của bạn chặn các sự kiện SCREEN_ON.

This ĐÃ come up very recently:

android.intent.action.SCREEN_ON doesn't work as a receiver intent filter

also

Android - how to receive broadcast intents ACTION_SCREEN_ON/OFF?

+0

ah cảm ơn vì vậy sẽ phát hiện màn hình và cho phép tôi xử lý đúng cách? Tôi đã đọc chủ đề của bạn và bạn không khuyên bạn nên chạy dịch vụ nền và chờ điện thoại thức dậy. Tại sao? Nhược điểm và có cách nào xung quanh? Không chạy các dịch vụ nền như thế nào bạn phát hiện các sự kiện như thế này? – Joe

+0

Bài viết này thảo luận về vấn đề dịch vụ nền - http://www.androidguys.com/2010/03/29/code-pollution-background-control/ –

+0

vấn đề với câu trả lời này, bất kỳ lý do nào tại sao nó hoạt động, là vì hoạt động của bạn không nhận được ý định khi điện thoại đang ngủ. vì vậy bạn có thể đăng ký screen_on trong hoạt động của bạn, nhưng bạn sẽ không bao giờ nhận được nó. –

0

Bạn are right on các broadcast receiver. Bạn có thể nghe các sự kiện phát sóng SCREEN_ON và SCREEN_OFF.

3

Bạn cũng có thể có bộ thu phát sóng để nắm bắt mục đích phát sóng USER_PRESENT khi người dùng đã mở khóa thiết bị. Đương nhiên một số phiên bản của Honeycomb không tôn trọng điều này, nhưng đối với tất cả các phiên bản Android không chết (2.x và 4.x), nó hoạt động độc đáo.

+1

Điều này cũng hoạt động nếu bạn đăng ký từ AndroidManifest.xml. – bk138

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