Java 无法创建和运行应用程序锁定服务
Java 无法创建和运行应用程序锁定服务,java,android,service,alarmmanager,Java,Android,Service,Alarmmanager,我一直在尝试构建一个名为App Lock的项目。 我的问题是,每当我尝试运行该项目时,它都会显示一条消息,不幸的是,应用程序锁已停止 日志类别:- 01-15 10:29:58.322 31941-31941/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.pk.applock, PID: 31941
我一直在尝试构建一个名为App Lock的项目。
我的问题是,每当我尝试运行该项目时,它都会显示一条消息,不幸的是,应用程序锁已停止 日志类别:-
01-15 10:29:58.322 31941-31941/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pk.applock, PID: 31941
java.lang.RuntimeException: Unable to start service com.pk.applock.ApplockService@21d15610 with Intent { act=com.pk.applock.applock_service.start flg=0x4 cmp=com.pk.applock/.ApplockService (has extras) }: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2886)
at android.app.ActivityThread.access$2100(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.pk.applock.ApplockService.getTopTask(ApplockService.java:37)
at com.pk.applock.ApplockService.checkPackageChanged(ApplockService.java:86)
at com.pk.applock.ApplockService.onStartCommand(ApplockService.java:110)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2869)
at android.app.ActivityThread.access$2100(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
下面是ApplockService.class的完整代码
public class ApplockService
extends Service{
private Handler handler;
private static PendingIntent pendingIntent;
private String packageName;
private Map<String,Boolean> lockedPackages;
Intent intent;
private ActivityManager manager;
Context context;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private ActivityManager.RunningTaskInfo getTopTask()
{
return (ActivityManager.RunningTaskInfo)this.manager.getRunningTasks(1).get(0);
}
private boolean init()
{
handler=new Handler();
lockedPackages=new HashMap();
Iterator iterator=PrefUtils.getLocked((Context)this).iterator();
do {
if(!iterator.hasNext()) {
ApplockService.startAlarm((Context)this);
return true;
}
String string=(String)iterator.next();
lockedPackages.put(string,true);
}while (true);
}
private static void startAlarm(Context context)
{
AlarmManager alarmManager=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
PendingIntent repeated_intent=ApplockService.getRunIntent(context);
alarmManager.setRepeating(3, SystemClock.elapsedRealtime(),5,repeated_intent);
}
private static final PendingIntent getRunIntent(Context context)
{
if(pendingIntent==null)
{
Intent intent1=new Intent(context,ApplockService.class);
intent1.setAction("com.pk.applock.applock_service.start");
pendingIntent=PendingIntent.getService(context,1193135,intent1,0);
}
return pendingIntent;
}
public static final void start(Context context)
{
ApplockService.startAlarm(context);
}
public void showLocker(String packageName)
{
Intent intent=LockService.getLockIntent((Context)this,packageName);
intent.setAction(LockService.ACTION_COMPARE);
intent.putExtra(LockService.EXTRA_PACKAGENAME, packageName);
startService(intent);
}
public void checkPackageChanged()
{
String string=getTopTask().topActivity.getPackageName();
onAppOpen(string);
}
private void onAppOpen(String string)
{
if (lockedPackages.containsKey(string))
onLockedAppOpen(string);
}
private void onLockedAppOpen(String string)
{
if(this.lockedPackages.get(string).booleanValue())
{
showLocker(string);
}
}
@Override
public int onStartCommand(Intent intent,int n2,int n3)
{
if(intent==null||"com.pk.applock.applock_service.start".equals(intent.getAction()))
{
if(!init())
init();
checkPackageChanged();
return 2;
}
return 2;
}
}
公共类ApplockService
扩展服务{
私人经办人;
私人静电吊挂;
私有字符串包名;
私有地图锁定包;
意图;
私人活动经理;
语境;
@可空
@凌驾
公共IBinder onBind(意向){
返回null;
}
private ActivityManager.RunningTaskInfo getTopTask()的私有活动
{
返回(ActivityManager.RunningTaskInfo)this.manager.getRunningTasks(1.get)(0);
}
私有布尔init()
{
handler=新的handler();
lockedPackages=newHashMap();
Iterator Iterator=PrefUtils.getLocked((上下文)this.Iterator();
做{
如果(!iterator.hasNext()){
startAlarm((上下文)this);
返回true;
}
字符串=(字符串)迭代器。下一步();
lockedPackages.put(字符串,true);
}虽然(正确);
}
私有静态void startAlarm(上下文)
{
AlarmManager AlarmManager=(AlarmManager)context.getSystemService(context.ALARM\u服务);
PendingIntent=ApplockService.getRunIntent(上下文);
alarmManager.setRepeating(3,SystemClock.elapsedRealtime(),5,repeated_意图);
}
私有静态最终PendingEvent getRunIntent(上下文)
{
if(pendingIntent==null)
{
Intent intent1=新的Intent(上下文,ApplockService.class);
intent1.setAction(“com.pk.applock.applock_service.start”);
pendingent=pendingent.getService(上下文,1193135,意图1,0);
}
返回悬挂式帐篷;
}
公共静态最终无效开始(上下文)
{
ApplockService.startAlarm(上下文);
}
public void showLocker(字符串包名称)
{
Intent-Intent=LockService.getLockIntent((上下文)this,packageName);
意图.设置动作(锁定服务.动作\u比较);
intent.putExtra(LockService.EXTRA_PACKAGENAME,PACKAGENAME);
startService(意向);
}
公共无效检查包已更改()
{
String String=getTopTask().topActivity.getPackageName();
onAppOpen(字符串);
}
应用程序打开时的专用void(字符串)
{
if(锁包.容器(字符串))
onLockedAppOpen(字符串);
}
私有void onLockedAppOpen(字符串)
{
if(this.lockedPackages.get(string).booleanValue())
{
showLocker(字符串);
}
}
@凌驾
公共int onStartCommand(Intent Intent、int n2、int n3)
{
if(intent==null | |“com.pk.applock.applock_service.start”.equals(intent.getAction()))
{
如果(!init())
init();
checkPackageChanged();
返回2;
}
返回2;
}
}
请帮帮我我是android新手
提前感谢。似乎
管理器
对象尚未在ApplockService
类中设置。您可以将此代码放入init()
函数:
this.manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
在何处创建此.manager?也许你应该发布ApplockService类的完整代码。这可能是你的问题@雷帕姆好的,我会的that@ReyPham现在检查问题!好的,我会试着告诉你它是否有效!!当我运行代码时,它在调试时会变得无响应,在我看来,调用setRepeating的startAlarm()方法中存在问题。请告诉我该怎么做?或者你能告诉我调用ApplockService的start方法的合适位置吗。