我目前正在使用一个自定义AlertDialog,它有一个Activity中的Theme.Dialog主题,要求用户键入当前密码才能继续。防止HOME按钮关闭活动
根据Android - Is It possible to disable the click of home button我已经尝试了大多数方法,但它不起作用。
活动 - 的onCreate
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(PhysicalTheftDialog.this);
boolean isServerRunning = sp.getBoolean("isServerRunning", false);
if (isServerRunning == false) {
startService(new Intent(PhysicalTheftDialog.this, MyService.class));
}
else {
sp.getBoolean("isServerRunning", true);
}
服务
@Override
public void onCreate() {
/* //Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
player = MediaPlayer.create(this, R.raw.braincandy);
player.setOnPreparedListener(this);
try {
player.prepareAsync();
} catch (Exception e) {
Log.e(TAG, "", e);
}
player.setLooping(true); // Set looping*/
this.context = getApplicationContext();
//Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean isServerRunning = sp.getBoolean("isServerRunning", true);
while (!isServerRunning) {
// THAT CODE: check if activity is on the top
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// get a list of running processes and iterate through them
ActivityManager activityManager = (ActivityManager)context.getSystemService(Activity.ACTIVITY_SERVICE);
// get the info from the currently running task
List<ActivityManager.RunningTaskInfo> taskInfo = activityManager.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
// if top activity is not "MyActivity" activity, then launch it
if("nyp.android.project".equals(componentInfo.getClassName()) == false) {
Intent intent = new Intent(MyService.this, PhysicalTheftDialog.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}, 2000);
boolean serviceStatus = sp.getBoolean("isServerRunning", false);
}
}
logcat的
E/AndroidRuntime(9799): FATAL EXCEPTION: main
E/AndroidRuntime(9799): java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=xxxx }: java.lang.NullPointerException
E/AndroidRuntime(9799): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2387)
E/AndroidRuntime(9799): at android.app.ActivityThread.access$1900(ActivityThread.java:127)
E/AndroidRuntime(9799): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221)
E/AndroidRuntime(9799): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(9799): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(9799): at android.app.ActivityThread.main(ActivityThread.java:4511)
E/AndroidRuntime(9799): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(9799): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(9799): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
E/AndroidRuntime(9799): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
E/AndroidRuntime(9799): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(9799): Caused by: java.lang.NullPointerException
E/AndroidRuntime(9799): at nyp.android.project.MyService.onStart(MyService.java:95)
E/AndroidRuntime(9799): at android.app.Service.onStartCommand(Service.java:438)
E/AndroidRuntime(9799): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2370)
E/AndroidRuntime(9799): ... 10 more
顺便说一句:if(“nyp.android.project”.equals(service.service.getClassName()))是一个Yoda条件http://www.codinghorror.com/blog/2012/07/new-programming- jargon.html – Maxim 2012-07-25 15:48:05
boolean isServerRunning = sp.getBoolean(“isServerRunning”,true);如果在首选项中没有“isServiceRunning”,那么您的代码默认返回true。我认为应该是假的。它看起来没问题。在调试器中运行,看看它是如何工作的。 – Maxim 2012-07-25 19:25:40
我收到'ActivityManager无法解析为变量' – dythe 2012-07-25 19:59:13