`
yangguangfu
  • 浏览: 1538899 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android应用卸载之后打开Android浏览器问卷调查

阅读更多

 

实现原理

fork分叉函数

 

fork分叉(分裂)函数可以创建一个新进程, 并且新创建出来的进程(子进程)拥有创建它的那个进程(父进程)的数据空间, 堆栈资源等的拷贝. 并且相互不影响. (跟fork zha弹原理一样)

 

返回值会返回两次, 但有三种情况:

在父进程中, fork返回新创建子进程的进程ID.

在子进程中, fork返回0.

如果出现错误, fork返回一个负值.

 

 

1.该功能原理简介

 在程序没有卸载之前,调用C代码,去fork分叉出一个子进程;当程序被卸载时,这个子进程没有被立即关闭。这个子进程需要做的工作是:每一秒去查看/data/data/下是否有当前应用的包名,如果没有,被卸载了,打开浏览器,弹出一个页面,问卷调查用户卸载的原因。

 

2.实现思路归纳

 

1.声明native方法

2.在C语言中实现,里面去做fork分叉出一个子进程

3.子进程每隔1秒钟监听/data/data/当前包是否卸载

4.如果卸载了,调用Android浏览器

 

 

3.声明native方法

 

 

publicnativevoiduninstallListener();

 

 

4.在C语言中实现,里面去做fork分叉出一个子进程,并演示

 

//此方法会创建一个进程,父进程会返回一个值,子进程也会返回一次值.

    int state = fork();

    if(state > 0){

        //当前是父进程

        LOGD("parentprocess=%d",state);

    }elseif(state == 0){

        //当前是子进程

        LOGD("supprocess=%d",state);

       

    }else{

        LOGD("Error");

    }

 

 

5.子进程每隔1秒钟监听/data/data/当前包是否卸载

//此方法会创建一个进程,父进程会返回一个值,子进程也会返回一次值.

    int state = fork();

    if(state > 0){

        //当前是父进程

        LOGD("parentprocess=%d",state);

    }elseif(state == 0){

        //当前是子进程

        LOGD("supprocess=%d",state);

        //监听当前应用是否卸载

        int isStop = 1;

        while(isStop){

            //每隔1秒钟判断应用目录是否存在

            sleep(1);

            //FILE*fopen(constchar *, const char *);

            FILE* file =fopen("/data/data/com.itheima.pressuredemo","r");

            if(file == NULL){

                //当文件夹没有了,就是被卸载了

                LOGD("uninstalled....");

                isStop= 0;

            }

        }

    }else{

        LOGD("Error");

    }

 

6.C代码调用Android浏览器

 

 

Dos命令行中打开浏览器:

adb shell am start -aandroid.intent.action.VIEW -d http://www.itheima.com

C语言中通过execlp方法打开浏览器:

execlp("am", "am","start", "-a", "android.intent.action.VIEW","-d", "http://www.itheima.com", NULL);

 

命令:

# am start -a android.intent.action.VIEW -d http://10.0.2.2:8080

 

全命令:

execlp("am", "am","start", "-a", "android.intent.action.VIEW","-d", "http://www.itheima.com", NULL);

 

execlp("am", "am","start", "-a", "android.intent.action.VIEW","-d", "http://10.0.2.2:8080/uninstall.html", NULL);

 

 

 

C端完整代码:

/**

 * 监听当应用卸载

 */

JNIEXPORT void JNICALLJava_com_itheima_pressuredemo_MainActivity_uninstallListener

  (JNIEnv *env,jobject obj){

    //此方法会创建一个进程,父进程会返回一个值,子进程也会返回一次值.

    int state = fork();

    if(state > 0){

        //当前是父进程

        LOGD("parentprocess=%d",state);

    }elseif(state == 0){

        //当前是子进程

        LOGD("supprocess=%d",state);

        //监听当前应用是否卸载

        int isStop = 1;

        FILE* file;

        while(isStop){

            //每隔1秒钟判断应用目录是否存在

            sleep(1);

            //FILE*fopen(constchar *, const char *);

            file = fopen("/data/data/com.itheima.pressuredemo","r");

            if(file == NULL){

                //当文件夹没有了,就是被卸载了

                LOGD("uninstalled....");

                execlp("am","am", "start", "-a","android.intent.action.VIEW", "-d","http://10.0.2.2:8080/uninstall.html", NULL);

                isStop= 0;

            }

        }

    }else{

        LOGD("Error");

    }

 

}

 

 

分享到:
评论
4 楼 Harrisetype 2015-03-24  
demo不能打开浏览器
3 楼 antaojin 2015-01-18  
execlp("am","am", "start", "-a","android.intent.action.VIEW", "-d","http://10.0.2.2:8080/uninstall.html", NULL); 
2 楼 antaojin 2015-01-18  
阿福老师,我来自黑马。自己人。
1 楼 antaojin 2015-01-18  
在高版本Android4.x中浏览器打不开。

相关推荐

    Android卸载或删除应用,调用浏览器打开指定网页地址url

    在Android中,当用户卸载应用时,系统会触发一系列生命周期方法,但不包括自定义的代码。因为默认情况下,卸载过程中不会执行任何应用代码。然而,有一种间接的方式可以实现这个需求,即通过设置广播接收器。 1. **...

    Android应用卸载器源码

    在用户选择卸载应用时,Android系统会执行以下步骤: 1. 用户触发卸载请求,这可能通过点击应用列表中的卸载按钮实现。 2. 系统调用`PackageManagerService`,这是管理所有应用的系统服务。 3. `...

    Android监听自身卸载,弹出用户反馈调查

    这个功能可以让开发者在用户卸载应用时,弹出一个用户反馈调查的网页,以便收集用户的反馈信息,并且可以帮助开发者改进应用程序。 在 Android 开发中,实现这个功能需要使用 JNI(Java Native Interface),因为 ...

    android应用卸载提示

    `ACTION_PACKAGE_REMOVED`广播是在卸载应用时由系统发出的,表示某个应用包已经被移除。 以下是一个简单的BroadcastReceiver示例代码: ```java public class UninstallReceiver extends BroadcastReceiver { @...

    Android-监听自身应用卸载,并在卸载之后,使用libcurl三方库进行一次三方请求,或者启动网页的实例工程

    但由于应用已经卸载,系统可能无法直接打开浏览器,因此这种方式的可行性不如网络请求稳定。 总的来说,这个实例工程结合了Android的广播接收器、服务、JNI以及第三方库libcurl,展示了如何在应用卸载后执行操作。...

    android卸载应用程序

    android卸载已安装应用代码,提供点击打开应用功能,采用ListView显示所有已安装应用(剔除了原装应用)。 在此代码中可以学到,ListView自定义适配器的使用,ListView中给每条Item加按钮并实现ListView的Item与按钮...

    Android系统应用卸载demo

    在Android系统中,卸载应用通常分为用户应用(User Apps)和系统应用(System Apps)两种情况。用户应用可以通过标准的设置菜单或者第三方工具轻松卸载,但系统应用由于其预装并深度集成于Android系统中,一般不允许...

    Android应用源码之监听自身应用卸载,并在卸载之后,使用libcurl三方库进行一次三方请求,或者启动网页的实例工程

    Android系统在卸载应用时会发送一个ACTION_PACKAGE_REMOVED广播,我们可以通过注册一个自定义的BroadcastReceiver监听这个广播,当接收到这个广播时执行预设的任务。 接下来,我们关注使用libcurl进行三方请求的...

    安卓Android源码——监听自身应用卸载.zip

    在安卓(Android)开发中,有时开发者需要监听自身应用的卸载事件,以便在用户卸载应用时执行一些清理工作或发送反馈数据。本项目"安卓Android源码——监听自身应用卸载.zip"提供了一个实例工程,展示了如何实现这一...

    Android卸载应用和安装应用的广播

    // 这里可以获取到卸载应用的包名,然后进行你需要的操作 Log.d("UninstallReceiver", "应用 " + packageName + " 已卸载"); } } } ``` 在AndroidManifest.xml中,对卸载应用的BroadcastReceiver进行注册: ``...

    android卸载程序代码

    在Android系统中,卸载应用程序通常涉及到对Android SDK(软件开发工具包)的理解以及使用Java编程语言。这里我们将深入探讨如何通过代码实现卸载已安装的程序,特别注意的是,剔除原装软件可能需要系统级别的权限,...

    android 实现自我自动静默卸载

    android 实现自我自动静默卸载 妈妈再也不用担心我是流氓了 部分手机安装失败。本人三星i9108可以 小米安装失败。不知道为什么。同个程序。可能是小米没root,但是代码里面没有涉及root相关的 。只是修改了应用权限 ...

    NDK 完成卸载后打开调查问卷

    综上所述,"NDK 完成卸载后打开调查问卷"涉及到Android应用开发的多个方面,包括NDK和JNI的使用、事件监听、资源管理以及用户反馈收集。开发者需要对Android系统机制有深入理解,才能正确实现这一功能。

    批量安装卸载android应用

    在Android系统中,批量安装和卸载应用通常是开发者、测试人员或者系统管理员为了提高效率而进行的操作。批量处理可以节省大量的手动操作时间,特别是在需要处理大量应用时。本压缩包提供的"BatInstaller"工具,正是...

    android静默卸载指定包名APP

    通常情况下,用户可以通过设置菜单中的应用管理器来卸载应用程序,或者通过点击APK安装文件进行卸载。但这些方式都需要用户的交互。静默卸载则是绕过这些交互步骤,直接在后台完成卸载。 要实现静默卸载,我们需要...

    android静默卸载data/app下的应用程序

    在Android系统中,"静默卸载"是指在用户无感知的情况下,通过程序代码自动执行卸载应用程序的过程。这通常需要设备已经获得了Root权限,因为Root权限是Android系统的超级管理员权限,可以访问和修改系统级别的文件,...

    android 系统应用卸载(需root)

    android 系统应用卸载器:需要系统root,很方便的一个工具,不需要连接电脑去使用其他工具。

    android U盘卸载所需文件

    在Android系统中,U盘(USB存储设备)的卸载通常涉及到系统级别的操作,因为这关系到设备的安全性和稳定性。本文件集提供的代码是通过反射机制来实现Android端U盘的安全卸载。反射机制是Java编程语言中的一个高级...

    android实战 打开浏览器(android studio源程序工程)

    在Android开发中,"打开浏览器"是一个常见的功能需求,它涉及到Android系统中Intent的使用以及浏览器组件的调用。这个实战项目"android实战 打开浏览器"是为Android初学者设计的,通过Android Studio进行实践操作,...

    Android应用监听自身卸载

    首先,Android应用的生命周期是由系统控制的,通常情况下,用户卸载应用时,系统会停止应用的所有服务,清理其进程,并删除所有数据和文件。然而,开发者有时希望在应用被卸载前执行一些清理或记录操作,例如关闭...

Global site tag (gtag.js) - Google Analytics