簡體   English   中英

按下電源按鈕時打開活動android

[英]open activity when power button pressed android

我正在嘗試制作一個鎖屏應用程序,這就是為什么我想在每次打開屏幕時都啟動我的應用程序的原因。 目前,我找到了一種解決方案,其中使用了屏幕接收器的開/關以及方法onPause()onResume() 這是示例的鏈接: http : //thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/#comment-4777

我使用的是活動示例,而不是服務示例。

當屏幕關閉並打開且應用程序已在運行時,我實際上在LogCat中得到了“反饋”。 問題是,當我打開屏幕時,該應用程序無法啟動(即使顯示在最近使用的應用程序下)。

我不確定,但是我認為示例可以正常工作,只是缺少添加基本代碼。

我希望有人能幫幫忙 !!


感謝你及時的答復。 我已嘗試運行您的代碼,但仍無法正常工作。 我不確定是怎么了。 沒有錯誤信息。 該應用程序僅能正常運行,但在屏幕打開時不會啟動。

為了更輕松地為我提供幫助,這是我的代碼;)

這是我的接收者:

package com.example.screenlocker;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {


public static boolean screenOff = true;

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        screenOff = true;
        Intent i = new Intent(context,LockService.class);
        i.putExtra("screen_state", screenOff);
        context.startService(i);



    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        screenOff = false;
    }
}

這是我的服務:

package com.example.screenlocker;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;

public class LockService extends Service {

public void onCreate(){
    IntentFilter filter=new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver locker=new StartMyServiceAtBootReceiver();
    registerReceiver(locker, filter);
}

  @Override
  public void onStart(Intent intent, int startId) {
      boolean screenOn = intent.getBooleanExtra("screen_state", false);        
      if(screenOn){
                startActivity(new Intent(this, MainActivity.class));  

               }

  }

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

}

也許您知道出了什么問題。

為了做到這一點,需要做以下事情。

1.當您的應用程序啟動時,您必須啟動用於注冊SCREEN_TURN_ONSCREEN_TURN_OFF events

原因如果您不會啟動服務來注冊這些事件並僅將其注冊到活動中,那么當活動被破壞時,它將停止注冊屏幕開/關事件。制作服務會使該服務的壽命超過活動或應用程序的生命周期。

2.現在您需要在服務中放入一些代碼(在onCreate方法內部)

IntentFilter filter=new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
locker=new startLockActivity();
registerReceiver(locker, filter);

3.制作BroadCastReciever並檢查Screen ON / OFF事件並相應地執行操作。

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                screenOff = true;
                Intent i = new Intent(context,Locker.class);
                i.putExtra("screen_state", screenOff);
                context.startService(i);

            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                screenOff = false;
            }

4.現在,在服務中的onStartCommand方法中放置一些代碼,以獲取通過接收方發送的標志並開始您的鎖定活動。

boolean screenOn = intent.getBooleanExtra("screen_state", false);        
if(screenOn){
          startActivty(this,yourLockActivity.class);    
         }

希望它可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM