在任意位置獲取應用程式CONTEXT

2022-03-20 08:16:34 字數 3825 閱讀 9943

(二)context注意事項:

(三)獲取別的包的context

android中有context的概念,想必大家都知道。context可以做很多事情,開啟activity、傳送廣播、開啟本包下資料夾和資料庫、 獲取classloader、獲取資源等等。如果我們得到了乙個包的context物件,那我們基本上可以做這個包自己能做的大部分事情。

那我們能得到嗎?很高興的告訴你,能!

context有個createpackagecontext方法,可以建立另外乙個包的上下文,這個例項不同於它本身的context例項,但是功能是一樣的。

這個方法有兩個引數:

1。packagename  包名,要得到context的包名

2。flags  標誌位,有context_include_code和context_ignore_security兩個選項。 context_include_code的意思是包括**,也就是說可以執行這個包裡面的**。context_ignore_security的意思 是忽略安全警告,如果不加這個標誌的話,有些功能是用不了的,會出現安全警告。

下面給個小例子,執行另外乙個包裡面的某個類的方法。

另外乙個包的包名是chroya.demo,類名main,方法名print,**如下:

package chroya.demo;  

import android.os.bundle;  

import android.util.log;  

class main extends activity   

public void print(string msg)   

}

package chroya.demo;

import android.os.bundle;

import android.util.log;

class main extends activity

public void print(string msg)

}

本包的呼叫main的print方法的**塊如下:

context c = createpackagecontext("chroya.demo", context.context_include_code | context.context_ignore_security);  

//載入這個類  

class clazz = c.getclassloader().loadclass("chroya.demo.main");  

//新建乙個例項  

object owner = clazz.newinstance();  

//獲取print方法,傳入引數並執行  

object obj = clazz.getmethod("print", string.class).invoke(owner, "hello");  

context c = createpackagecontext("chroya.demo", context.context_include_code | context.context_ignore_security);

//載入這個類

class clazz = c.getclassloader().loadclass("chroya.demo.main");

//新建乙個例項

object owner = clazz.newinstance();

//獲取print方法,傳入引數並執行

object obj = clazz.getmethod("print", string.class).invoke(owner, "hello");

ok,這樣,我們就呼叫了chroya.demo包的main類的print方法,執行結果,列印出了hello。

怎麼樣,這只是乙個呼叫其他包的**的例子,我們獲取到context,還可以做很多事情,當然,題目所說的壞事,還是不要做為好。

(二)context注意事項:

(三)獲取別的包的context

android中有context的概念,想必大家都知道。context可以做很多事情,開啟activity、傳送廣播、開啟本包下資料夾和資料庫、 獲取classloader、獲取資源等等。如果我們得到了乙個包的context物件,那我們基本上可以做這個包自己能做的大部分事情。

那我們能得到嗎?很高興的告訴你,能!

context有個createpackagecontext方法,可以建立另外乙個包的上下文,這個例項不同於它本身的context例項,但是功能是一樣的。

這個方法有兩個引數:

1。packagename  包名,要得到context的包名

2。flags  標誌位,有context_include_code和context_ignore_security兩個選項。 context_include_code的意思是包括**,也就是說可以執行這個包裡面的**。context_ignore_security的意思 是忽略安全警告,如果不加這個標誌的話,有些功能是用不了的,會出現安全警告。

下面給個小例子,執行另外乙個包裡面的某個類的方法。

另外乙個包的包名是chroya.demo,類名main,方法名print,**如下:

package chroya.demo;  

import android.os.bundle;  

import android.util.log;  

class main extends activity   

public void print(string msg)   

}

package chroya.demo;

import android.os.bundle;

import android.util.log;

class main extends activity

public void print(string msg)

}

本包的呼叫main的print方法的**塊如下:

context c = createpackagecontext("chroya.demo", context.context_include_code | context.context_ignore_security);  

//載入這個類  

class clazz = c.getclassloader().loadclass("chroya.demo.main");  

//新建乙個例項  

object owner = clazz.newinstance();  

//獲取print方法,傳入引數並執行  

object obj = clazz.getmethod("print", string.class).invoke(owner, "hello");  

context c = createpackagecontext("chroya.demo", context.context_include_code | context.context_ignore_security);

//載入這個類

class clazz = c.getclassloader().loadclass("chroya.demo.main");

//新建乙個例項

object owner = clazz.newinstance();

//獲取print方法,傳入引數並執行

object obj = clazz.getmethod("print", string.class).invoke(owner, "hello");

ok,這樣,我們就呼叫了chroya.demo包的main類的print方法,執行結果,列印出了hello。

怎麼樣,這只是乙個呼叫其他包的**的例子,我們獲取到context,還可以做很多事情,當然,題目所說的壞事,還是不要做為好。

Android程式中任意位置獲取Context

context物件在android中是乙個很重要的內容,activity中我們很容易獲得該物件,然後在service以及其他class中並不是那麼簡單。下文介紹如何在任意位置獲得context物件。return instance override public void oncreate 這裡寫上完...

android應用程式的安裝位置

本文編輯整理自 android應用程式的預設安裝位置以及是否可移動取決於開發者在其androidmanifest.xml中的設定 xmlns android android versioncode 1 android installlocation auto android versionname ...

Android應用程式的安裝位置

android應用程式的預設安裝位置以及是否可移動取決於開發者在其androidmanifest.xml中的設定 xmlns android android versioncode 1 android installlocation auto android versionname 1.0 andr...