Im trying to make an app that Locks all applications with a password because "Kiosk Mode" cant be done as you can see in my question here ( disabling and hiding android navigation bar/notification menu permanently )
so what i did is i make a background service that checks if an application have been opened and i start a new activity that requests a password (i didn't implement the password yet, it can be done without checking a password and this is not my issue) .
The problem is my service isn't running and my LockScreen activity is not showing when i open an application.
i used this to write my background service (Blocking android apps programmatically @Amit Gupta answer) and (Using Service to run background and create notification @Muhammad Zeeshan Karamat Answer)
i found this answer but it didnt help me (How to always run a service in the background?)
Here is some of my code:
the main activity that start the service:
public class LockAppsActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startService(new Intent(LockAppsActivity.this, MyService.class));
}
});
}...etc
my service class:
public class MyService extends Service{
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Congrats! MyService Created", Toast.LENGTH_LONG).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
PackageManager packageManager = getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> appList = packageManager.queryIntentActivities(mainIntent, 0);
Collections.sort(appList, new ResolveInfo.DisplayNameComparator(packageManager));
List<PackageInfo> packs = packageManager.getInstalledPackages(0);
for(int i=0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
ApplicationInfo a = p.applicationInfo;
// skip system apps if they shall not be included
//apps.add(p.packageName);
}
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
String activityOnTop = ar.topActivity.getClassName();
if(!activityOnTop.equals("com.example.lock")){
Intent lockIntent = new Intent(this, LockScreen.class);
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(lockIntent);
}
Toast.makeText(this, "My Service Running", Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
and this is my LockScreen class which is not showing when i start any other application:
public class LockScreen extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button button = (Button) findViewById(R.id.okButton);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
LockScreen.this.onBackPressed();
}
});
Button cancelButton = (Button) findViewById(R.id.cancelButton);
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startHomescreen=new Intent(Intent.ACTION_MAIN);
startHomescreen.addCategory(Intent.CATEGORY_HOME);
startHomescreen.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(startHomescreen);
}
});
}//onCreate
Edit: onStartCommand should work when i return START_STICKY; but it doesn't work too. Help would be appreciated,
Thanks