2015-11-27 33 views
1

我試圖捕捉設備屏幕關閉或打開時的情況。我看着這個答案here。但是我還沒有弄明白。當我測試它時,我收到一條警告,說該服務無法創建:Unable to start service Intent... not found.我是新來的服務,所以我希望有人可以查看代碼,看看我做錯了什麼。這是我的ReceiverService檢測屏幕鎖定的服務:「無法啓動服務意圖」

public class MyReceiver extends BroadcastReceiver { 
private boolean screenOff; 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
     screenOff = true; 
     Home.locked = true; 
     Log.i("screenstate", "off"); 
    } else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
     Log.i("screenstate", "on"); 

    }else if(intent.getAction().equals(Intent.ACTION_ANSWER)) { 

    } 
    Intent i = new Intent(context, UpdateService.class); 
    i.putExtra("screen_state", screenOff); 
    context.startService(i); 
}} 

服務:

public class UpdateService extends Service { 
BroadcastReceiver mReceiver; 
Boolean isRunning; 
Context context; 
Thread backgroundThread; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    context = this; 
    isRunning = false; 
    // register receiver that handles screen on and screen off logic 
    Log.i("UpdateService", "Started"); 
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); 
    filter.addAction(Intent.ACTION_SCREEN_ON); 
    filter.addAction(Intent.ACTION_ANSWER); 
    mReceiver = new MyReceiver(); 
    registerReceiver(mReceiver, filter); 
} 

@Override 
public void onDestroy() { 
    unregisterReceiver(mReceiver); 
    isRunning = false; 
    super.onDestroy(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    boolean screenOn = intent.getBooleanExtra("screen_state", false); 
    if (!screenOn) { 
     Log.i("screenON", "Called"); 
     Toast.makeText(getApplicationContext(), "Awake", Toast.LENGTH_LONG) 
       .show(); 
    } else { 
     Log.i("screenOFF", "Called"); 
    } 
    return START_STICKY; 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
}} 

這是我的主要活動:

public class Home extends Activity { 
static boolean locked = true; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    startService(new Intent(Home.this, UpdateService.class)); 
    if(locked) 
     setContentView(R.layout.activity_home2); 
    else 
     showApps(null); 
} 

public void showApps(View v){ 
    locked = false; 
    Intent i = new Intent(this, AppsList.class); 
    startActivity(i); 
}} 

在此先感謝。

+1

您是否在清單中聲明瞭該服務? – Onik

+0

我還沒有在清單中宣佈它...我也不知道如何正確地做到這一點。我不知道清單所需的全部信息。我只需要添加? – sadelbrid

+1

似乎現在工作得很好。謝謝 – sadelbrid

回答

1

它看起來像服務尚未在清單文件中聲明。在<application>標記中添加其聲明:

<service android:name=".UpdateService"/>