2014-04-14 13 views
7

Làm thế nào để đánh thức điện thoại Android từ chế độ ngủ (tạm dừng để ghi nhớ) có thể lập trình? Tôi không muốn mua bất kỳ wakelock, có nghĩa là điện thoại đi vào giấc ngủ "thực sự" với CPU bị vô hiệu hóa. Tôi đoán tôi có thể sử dụng một số loại RTC (đồng hồ thời gian thực) cơ chế?làm thế nào để đánh thức điện thoại Android từ chế độ ngủ?

Có ai có ví dụ nào không?

Cảm ơn.

+0

Khi nào bạn muốn nó thức dậy? Sau một thời gian chờ nhất định? Vào một ngày và giờ nhất định? –

+0

Bạn đã tìm thấy giải pháp chưa? Bạn có thấy bất kỳ câu trả lời nào hữu ích không? – bendaf

+0

Xin vui lòng nếu bạn tìm thấy câu trả lời cho câu hỏi của bạn chấp nhận câu hỏi từ bên dưới hoặc sửa đổi câu hỏi của bạn để tôi có thể giúp bạn nhiều hơn nữa. – bendaf

Trả lời

0

Sử dụng AlarmManager để phát Intent tại thời điểm bạn muốn thực hiện một số công việc và để thiết bị thức dậy. Trong BroadcastReceiver, hãy thực hiện công việc bạn cần làm (nếu nó ngắn) hoặc có được WakeLock (có thể là qua một đơn), bắt đầu dịch vụ, có dịch vụ thực hiện công việc, sau đó có dịch vụ giải phóng Khóa sau.

Bạn có thể đọc về điều đó ở đây: https://groups.google.com/forum/#!topic/android-developers/5--QRAPlFL0

+1

hmmm ..., tôi đã thử AlarmManager và có vẻ như nó sẽ không đánh thức điện thoại nếu điện thoại ở chế độ ngủ "thực" (không có wakelock). – jiawen

+1

Cách đánh thức điện thoại khi ở chế độ ngủ. –

+0

@jiawen AlarmManager sẽ sử dụng setAndAllowWhileIdle() hoặc setExactAndAllowWhileIdle() thay vì set(). Báo thức được đặt theo cách này sẽ bị bradcasted ngay cả khi thiết bị đang ngủ. – Karthiksrndrn

7

Để cho các Hoạt động thức dậy thiết bị và không yêu cầu mật khẩu/swipe, bạn chỉ cần thêm một vài lá cờ. Để nhận được điều đó, hãy bao gồm mã của bạn:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

Điều này sẽ wake up hoạt động ứng dụng của bạn.

1

tôi chỉ viết một ứng dụng mà có thể làm được điều này, đây là một số mã ví dụ: Trước tiên, tôi tạo ra một AlarmManager và thiết lập một báo động trong một thời gian cụ thể:

AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 15); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 
// if the time is before now then add one day to it 
if(calendar.getTimeInMillis() < System.currentTimeMillis()) 
    calendar.setTimeInMillis(calendar.getTimeInMillis()+86400000); 
manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0); 

Tôi cần một BroadcastReciever để nhận này báo thức. Đối với điều này tôi phải đưa vào manifest của tôi:

<application ...> 
    <receiver android:name="hu.bendaf.example.AlarmReceiver"/> 
... 
</application> 

và tôi cũng có lớp AlarmReciever, mà bắt đầu Hoạt động chính của tôi vào Nhận các:

public class AlarmReceiver extends BroadcastReceiver { 
    public static final String WAKE = "Wake up"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Starting MainActivity 
     Intent myAct = new Intent(context, MainActivity.class); 
     myAct.putExtra(WAKE, true); 
     myAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(myAct); 
    } 
} 

và chức năng onCreate Hoạt động của tôi tôi có:

// Wake up phone if needed 
if(getIntent().hasExtra(AlarmReceiver.WAKE) && getIntent().getExtras().getBoolean(AlarmReceiver.WAKE)){ 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, 
         WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
         WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
         WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
} 

Mã này đánh thức điện thoại của tôi sau 15:30:00 (hôm nay là ngày hôm nay hoặc ngày mai).

+0

Tạm dừng báo thức từ chế độ chờ, hoặc cũng từ chế độ tạm dừng? – ransh

+0

Vì câu trả lời này cho biết http://stackoverflow.com/a/5120225/3162918 nó cũng được đảm bảo hoạt động ở chế độ ngủ. Đó cũng là những gì các bài kiểm tra của tôi cũng đã được xác nhận, báo động đã đánh thức điện thoại của tôi trong mọi tình huống, trừ khi nó bị tắt. – bendaf

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