Android中NDK監(jiān)聽自身App卸載后跳出網(wǎng)頁

我們知道在Android中要監(jiān)聽自身App被卸載是沒有辦法實(shí)現(xiàn)的,只能監(jiān)聽第三方的App卸載,而且只能監(jiān)聽系統(tǒng)廣播才能實(shí)現(xiàn)監(jiān)聽第三方App的卸載。那么我們要監(jiān)聽自身的卸載情況,只能用NDK來實(shí)現(xiàn)了。

首先用NDK來監(jiān)聽App的卸載有很多種方法,在這里我只介紹最簡單的方法來實(shí)現(xiàn),通過在C中開一個(gè)獨(dú)立線程來監(jiān)聽我的App有沒有被卸載,用一個(gè)定時(shí)器每隔1秒鐘就去查詢一下當(dāng)前的App在data/data下還存在不,來實(shí)現(xiàn)該功能:

據(jù)體代碼實(shí)現(xiàn)如下:




void java_com_example_appuninstall_MainActivity_UninstallListener(JNIEnv* env,

jobject obj, jstring packageName, jstring url) {

int code = fork(); //開啟子線程監(jiān)聽App目錄

int isStop = 1;

if (code > 0) {

} else if (code == 0) {

while (isStop) {

sleep(1);

char* packagename = Jstring2CStr(env, packageName);

char* url = Jstring2CStr(env, url);

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

FILE *fileName = fopen(packagename, "r");

if (fileName == NULL) {

//說明此App已經(jīng)被卸載,要彈出一個(gè)網(wǎng)頁

execlp("am", "am", "start", "-a", "android.intent.action.VIEW",

"-d", url, (char*) NULL);

}

}

}

}

上面的方法中packageName是指App安裝所在的全路徑,url是卸載后要跳轉(zhuǎn)的網(wǎng)頁鏈接

在此附上JNI中很有用的jstring 與 const char* 轉(zhuǎn)換函數(shù)

char* Jstring2CStr(JNIEnv* env, jstring jstr) {

char* rtn = NULL;

jclass clsstring = (*env)->FindClass(env, "java/lang/String");

jstring strencode = (*env)->NewStringUTF(env, "GB2312");

jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes",

"(Ljava/lang/String;)[B");

jbyteArray barr = (jbyteArray) (*env)->CallObjectMethod(env, jstr, mid,

strencode); // String .getByte("GB2312");

jsize alen = (*env)->GetArrayLength(env, barr);

jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);

if (alen > 0) {

rtn = (char*) malloc(alen + 1); //"\0"

memcpy(rtn, ba, alen);

rtn[alen] = 0;

}

(*env)->ReleaseByteArrayElements(env, barr, ba, 0); //

return rtn;

}

好了,上面的功能就全部實(shí)現(xiàn)了,如果你有更容易或更好的方法可以留言。

需要demo的也可以聯(lián)系我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容