Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6339851
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 24, 20262026-05-24T19:43:34+00:00 2026-05-24T19:43:34+00:00

We have a program that we install on the phones and loan the phones

  • 0

We have a program that we install on the phones and loan the phones to users for a certain period. We would like the phones to be used solely for running our application (no phone calls, no games, no nothing). The phones will be rooted.

So the things we need:

  • Run in full screen, nothing else will be visible
  • Home button and other device buttons won’t work
  • Our app will run automatically on startup

It doesn’t have to be “hacker proof”, but should be sufficient to prevent average user messing with the device.

Is this possible? I have done similar things on Symbian & Windows Mobile but I don’t have much experience with this stuff on Android. How may this be achieved?

UPDATE 2015: If you don’t mind limiting your app to single phone vendor, Samsung has introduced the KNOX SDK that lets you achieve kiosk mode and much more easily without rooting the phone. See details at: https://seap.samsung.com/developer/sdk/knox-standard-android

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-24T19:43:35+00:00Added an answer on May 24, 2026 at 7:43 pm

    Yes it is possible but you can not control the behaviour of Home key and end call key.

    for full screen add android:theme="@android:style/Theme.NoTitleBar.Fullscreen" to activity tag in manifest file.

    To disable incoming call you need to listen phone calls:

    import android.app.Service;
    import android.os.IBinder;
    import android.telephony.PhoneStateListener;
    import android.telephony.TelephonyManager;
    
    public class MyPhoneStateListener extends Service{
    
        @Override
        public IBinder onBind(Intent arg0) {
            return null;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
                StateListener phoneStateListener = new StateListener();
                TelephonyManager telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
                telephonymanager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    
        }
    
        class StateListener extends PhoneStateListener{
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                switch(state){
                    case TelephonyManager.CALL_STATE_RINGING:
                        //Disconnect the call here...
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        break;
                    case TelephonyManager.CALL_STATE_IDLE:
                        break;
                }
            }
        };
    
        @Override
        public void onDestroy() {
    
        }
    }
    

    Note: While stopping service don’t foget to remove the listener and add these permissions to your manifest file:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    and disconnect the call programmatically:

    try{
        TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        Class c = Class.forName(manager.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        ITelephony telephony = (ITelephony)m.invoke(manager);
        telephony.endCall();
    } catch(Exception e){
        Log.d("",e.getMessage());
    }
    

    Note: Add this file to disconnect the call:
    http://dl.dropbox.com/u/31740476/ITelephony.aidl

    To disable keys you need to override:

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if(KeyEvent.KEYCODE_MENU == event.getKeyCode() || KeyEvent.KEYCODE_DPAD_LEFT==event.getKeyCode()
                || KeyEvent.KEYCODE_DPAD_DOWN==event.getKeyCode() || KeyEvent.KEYCODE_DPAD_RIGHT==event.getKeyCode()
                || KeyEvent.KEYCODE_DPAD_UP==event.getKeyCode() || KeyEvent.KEYCODE_DPAD_CENTER==event.getKeyCode()
                || KeyEvent.KEYCODE_BACK==event.getKeyCode())
        {
            return false;
        }
        return true;
    }
    

    On Home key press the Home screen will come, so to overcome this you need to implement a service and there you need to implement a infinite thread to relaunch your app like this:

    public class AppTrackingService extends Service {
    
        private RunnableThread thread;
        private Context ctx;
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        public void onCreate(){
            super.onCreate();
            ctx = AppTrackingService.this;
            thread = new RunnableThread();
        }
    
        public void onStart(Intent intent, int startid) {
            try{
                if(thread==null) thread = new RunnableThread();
                thread.startThread();
            }catch(Exception e){  }
        }
    
        class RunnableThread extends Thread {
    
            Handler back_handler = new Handler();
            boolean isContinue = false;
    
            public RunnableThread(){
                isContinue = false;
            }
    
            public void setIsContinue(boolean val){
                this.isContinue = val;
            }
    
            public void startThread(){
                isContinue = true;
                start();
            }
    
            public void run(){
                ActivityManager actMngr = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
                while(isContinue){
                    try{
                    //Maintain a boolean "isyourapprunning" to know if your app was running or not....
                        if(isyourapprunning){
                        String runningPkg = actMngr.getRunningTasks(1).get(0).topActivity.getPackageName();
                            if (!runningPkg.equals(ctx.getPackageName())){
                                    launchApp(ctx.getPackageName());
                                }
                            Thread.sleep(2500);  //2.5 secs
                        }else{
                            isContinue = false;
                            stopSelf();
                        }
    
                    }catch(Exception e){ }
                }//end of while loop
            }
    
            protected void launchApp(String packageName) {
                Intent mIntent = getPackageManager().getLaunchIntentForPackage(packageName);
                mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                mIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                if (null != mIntent) {
                    try {
                        startActivity(mIntent);
                    } catch(Exception e) { }
                }
            }
        }
    }
    

    EDIT

    You would need to add the following permission to be able to end calls:

    <uses-permission android:name="android.permission.CALL_PHONE" />
    

    And you can use the following AIDL file:

    package com.android.internal.telephony;
    
    /**
     * Interface used to interact with the phone.  Mostly this is used by the
     * TelephonyManager class.  A few places are still using this directly.
     * Please clean them up if possible and use TelephonyManager instead.
     *
     * {@hide}
     */
    interface ITelephony {
        /**
         * End call if there is a call in progress, otherwise does nothing.
         *
         * @return whether it hung up
         */
        boolean endCall();
    
        /**
         * Silence the ringer if an incoming call is currently ringing.
         * (If vibrating, stop the vibrator also.)
         *
         * It's safe to call this if the ringer has already been silenced, or
         * even if there's no incoming call.  (If so, this method will do nothing.)
         *
         * TODO: this should be a oneway call too (see above).
         *       (Actually *all* the methods here that return void can
         *       probably be oneway.)
         */
        void silenceRinger();
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a 3rd-party installer program that I would like for my users to
I have a Delphi 6 program that for most users installs fine while running
I have a program that I would like to sell to small companies. I
I have a python program that I would like to present as a simple
I have a program that uses dateutil from the package index. I would like
I have a CAB file that installs our program to Windows CE. I have
We have an app that currently installs itself into 'program files\our app', and it
I have a Python program that uses YAML. I attempted to install it on
I have a code at the top of my program that looks like this:
I'm writing a cgi-bin program for my Sheevaplug (running the default Ubuntu install) that

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.