Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中禁用应用程序unistall?_Android - Fatal编程技术网

在android中禁用应用程序unistall?

在android中禁用应用程序unistall?,android,Android,我想做这样一件事,当我的应用程序安装在安卓手机上时。没有人可以从手机上卸载它,或者当任何人试图卸载它时,会出现一个弹出窗口或任何警报。 有什么办法吗?目前我认为您可以实现这一目标的唯一方法是使用两个应用程序 他是主人。。它作为服务运行,检查应用程序是否已安装,如果缺少,则安装 是您希望用户看到的应用程序 好的。。嗯,我可以想其他的办法。。正如Blessenm所说,改变操作系统。。但这假设您的目标是特定的硬件 您可能可以在系统中设置根目录,这样您就可以访问管理员的想法。。不确定它是否有效 从理论上

我想做这样一件事,当我的应用程序安装在安卓手机上时。没有人可以从手机上卸载它,或者当任何人试图卸载它时,会出现一个弹出窗口或任何警报。
有什么办法吗?

目前我认为您可以实现这一目标的唯一方法是使用两个应用程序

  • 他是主人。。它作为服务运行,检查应用程序是否已安装,如果缺少,则安装
  • 是您希望用户看到的应用程序
  • 好的。。嗯,我可以想其他的办法。。正如Blessenm所说,改变操作系统。。但这假设您的目标是特定的硬件


    您可能可以在系统中设置根目录,这样您就可以访问管理员的想法。。不确定它是否有效

    从理论上讲,您可以“root”手机,将应用程序添加到系统分区(用户不能修改系统分区),然后再次“unroot”手机。不过,我不确定这是否适用于所有型号。某些设备无法“取消根目录”。您需要启用deviceAdmin以禁用
    强制停止
    卸载
    功能。这由处理企业/应用程序策略管理的
    设备管理API处理。

    不可能显式禁用。但是,您可以为此使用变通方法。 在应用程序中创建在后台持续运行的服务:

    //MasterService.java
    public class MasterService extends Service{
    
        private ThreadPoolExecutor executor;
        private Runnable runnable = new Runnable(){
            @Override
            public void run(){}
        };
    
        public MasterService(){
            executor = new ThreadPoolExecutor(1, 1, 1, TimeUnit.SECONDS, 
                           new LinkedBlockingQueue<Runnable>());
        }
    
         @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            executor.execute(runnable);
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            executor.shutdown();
        }
    
    };
    
    在“活动”中,创建任何视图并覆盖“后退”按钮,以防止用户返回“软件包卸载程序”屏幕:

    //OverlayActivity.java
    public class OverlayActivity extends Activity{
    
        private ImageView view;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            view = new ImageView(this);
            setContentView(view);
        }
    
    
        @Override
        public void onBackPressed() {
    
        }
    };
    
    Home按钮并不重要,因为它将隐藏所有活动,如果用户按下task按钮选择package manager,则会再次打开
    OverlayActivity
    。 确保主服务不能停止或强制关闭。有两种方法可以解决此问题:

  • 在您的
    ondestory
    功能中发送一条自定义广播消息,该消息将再次启动您的服务
  • 通过检查
    com.android.settings
    来禁用设置应用程序

  • 我希望你知道你在做什么,因为用户应该知道何时卸载应用。

    你不想让人们从手机上卸载你的应用吗?可怕…是他们让设备管理员的任何方式。意思是说,如果一个用户在android上安装了应用程序,其他用户就不能从该设备上删除该应用程序了吗?等等,伙计们。。有时手机不属于使用它的人。。如果我拥有一家公司,希望我的员工使用我为他们开发的应用程序,那么如果他们取消安装,我会很生气。想想停车罚单人员、销售人员、送货人员。硬件是我的,我说你用它。@daveatflow。。我想做这种东西。你能帮帮我吗?@Niko好话。。。“不可能”是人类经常使用的一个词。只是因为我们不知道如何。。但这并不意味着它不可能完成。嗯,你能解释一下如何为手机设置根目录吗。是说所有的安卓制造商都允许吗?如果不超过哪个已知的制造商提供此功能?对每个设备制造商来说,为手机寻根可能是一个非常具体的过程。我不认为有一个教程涵盖所有不同的品牌。恐怕你得在谷歌上搜索具体说明。我知道索尼爱立信(Sony Mobile now-a-days)在生根方面非常自由(他们在自己的开发者论坛上有一个非常有用的社区)。你能分享设备管理API的示例代码来使用这个功能吗?
    //OverlayActivity.java
    public class OverlayActivity extends Activity{
    
        private ImageView view;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            view = new ImageView(this);
            setContentView(view);
        }
    
    
        @Override
        public void onBackPressed() {
    
        }
    };