简体   繁体   English

无法创建和运行应用锁定服务

[英]Unable to create and run app lock service


I have been trying to build a project named App Lock. 我一直在尝试建立一个名为App Lock的项目。
My problem is that whenever i try to run the project it shows a message Unfortunately App Lock has been stopped . 我的问题是,每当我尝试运行该项目时,它都会显示一条消息, 不幸的是App Lock已停止

Log cat :- 原木猫:-

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) 

Here is the complete code of ApplockService.class 这是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;
}
}

Please help me!!! 请帮我!!!
I am new to android! 我是Android新手!

Thanks in advance. 提前致谢。

Seem like manager object is not set yet in ApplockService class. 似乎尚未在ApplockService类中设置manager对象。 You may put this code to init() function: 您可以将此代码放入init()函数中:

this.manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM