1
我想創建一個後臺服務,當Android設備屏幕打開/喚醒或任何觸摸輸入時,它可以自動運行。請幫助我。非常感謝如何使Android後臺服務僅在屏幕開啓/喚醒時啓動
我想創建一個後臺服務,當Android設備屏幕打開/喚醒或任何觸摸輸入時,它可以自動運行。請幫助我。非常感謝如何使Android後臺服務僅在屏幕開啓/喚醒時啓動
在您的活動中的onCreate
方法中啓動服務。
startService(new Intent(this, CDTservice.class));
不要忘記在清單文件中註冊該服務。
<service
android:enabled="true"
android:name=".CDTservice" />
下面是服務類:
package com.example.sensorsample;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.KeyguardManager;
import android.app.Service;
import android.app.KeyguardManager.KeyguardLock;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log;
import android.view.WindowManager;
import android.widget.Toast;
public class CDTservice extends Service {
ScreenBroadcastReceiver m_receiver;
public String activityname;
PowerManager pm;
WakeLock wl;
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
m_receiver = new ScreenBroadcastReceiver();
registerReceiver(m_receiver, filter);
Log.d("Widgettool", "works");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
Toast.makeText(getBaseContext(), "SERVICE ON", Toast.LENGTH_SHORT)
.show();
return START_STICKY;
}
@Override
public void onDestroy() {
stop();
super.onDestroy();
unregisterReceiver(m_receiver);
wl.release();
}
@SuppressWarnings("deprecation")
public void start() {
try {
pm = (PowerManager) getApplicationContext().getSystemService(
Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, getClass().getName());
wl.acquire();
KeyguardManager mgr = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = mgr.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
//new SensorActivity().service();
} catch (Exception e) {
}
}
public void stop() {
ActivityManager am = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
Log.d("topActivity", "CURRENT Activity ::"
+ taskInfo.get(0).topActivity.getClassName());
activityname = taskInfo.get(0).topActivity.getClassName();
ComponentName componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
}
private class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("ON SCREEN ON", "might hang here");
// start();
// stop();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
start();
Log.d("SCREEN OFF", "might hang here");
// stop();
}
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
我已經嘗試過你的源代碼,但它不工作...我想要的是我的應用程序打開時,屏幕解鎖,或清醒 – mighty
關注這個問題http://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen- off –