1. 程式人生 > >Android如何獲取其他應用程式的context

Android如何獲取其他應用程式的context

Android中有Context的概念,想必大家都知道。Context字面意思上下文,位於framework package的android.content.Context中,其實該類為LONG型,類似Win32中的Handle控制代碼,很多方法需要通過 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.app.Activity;
import android.os.Bundle;
import android.util.Log;

class Main extends Activity {
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	public void print(String msg) {
		Log.d("Main", "msg:"+ 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");

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

      怎麼樣,這只是一個呼叫其他包的程式碼的例子,我們獲取到Context,還可以做很多事情。

相關推薦

Android如何獲取其他應用程式context

Android中有Context的概念,想必大家都知道。Context字面意思上下文,位於framework package的android.content.Context中,其實該類為LONG型,類似Win32中的Handle控制代碼,很多方法需要通過 Context才

AndroidAndroid手機上獲取其他應用的包名及版本號

string android手機 app名 fin 產品 logo 信息 led 直接 獲取Android手機上其他應用的包名及版本號方法有很多,可以通過AAPT從APK包中直接獲取,也可以通過代碼在手機上獲取。顯然,對於產品或者用戶來說要獲取這些信息,在手機上獲取更為簡便

Android中開啟其他應用程式的元件

     componentName=new ComponentName("com.liu.testdemo",            "com.liu.testdemo.Receiver.TextBroadcastReceiver");

應用程序實現對其他應用程式的呼叫

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android獲取系統拍照程式發出的廣播

說實話網上想找這段程式碼真的很少,我也是最近有這種需求才寫的,公佈出來以免更多人走彎路,節省大家的時間,話不多說請看程式碼 /** * @author * 廣播接收者 */ public class CameraBroadCastReceiver extends BroadcastR

獲取一個應用程式的執行次數,如果超過5次,給出使用次數已達上限請註冊的提示

Properties的練習題: 獲取一個應用程式的執行次數,如果超過5次,給出使用次數已達上限請註冊的提示。 思路: 計數器 每次程式啟動時都需要技術一次,並且是在原有的次數上進行計數 計數器是一個變數,一旦程式結束,計數器消失… 那麼再次啟動程式時,計數器又恢復預設值

Android開發系統應用程式

一、配置清單檔案 在 manifest 標籤裡新增屬性:android:sharedUserId=“android.uid.system” 二、打包apk android studio : Build -> Make Project / Rebuild P

Android 獲取最近應用的縮圖

最近有項需求是獲取應用的縮略,用於在動畫時顯示。因此就對此塊知識簡要了解了一下。 在android中獲取視訊檔案的縮圖有三種方法: 1.從媒體庫中查詢新視訊增加後需要SDCard重新掃描才能給新增加

Android獲取系統應用及安裝應用的許可權列表

主要通過PackageManager中的方法 程式碼: public class InstallApps extends ListActivity { HashMap<String, String[]> map=new HashMap<

Android其他應用/data分割槽下檔案的讀取

最近在做一個功能,需要判斷一個第三方應用/data分割槽下的某個檔案是否存在。未root的手機是不能訪問到其他應用/data分割槽下的檔案的,我現在使用的裝置已經打開了root。 Java的File類可以對檔案做一系列操作。開始的思路是通過File.listF

Android Launcher啟動應用程式流程原始碼解析

帶著問題看原始碼 點選桌面Launcher圖示後做了哪些工作? 應用程式什麼時候被建立的? Application和MainActivity的onCreate()方法什麼時候被呼叫的? 概述 在Android系統中,啟動四大元件中的任何一個都可以啟動應用程式。但絕大部分時候我們是通過點選Laun

android 如何保持應用程式存活率

在茫茫大海中,尋求應用程式存活率解決方案,一般都是啟動服務,儲存活率,也有的是在AndroidManifest.xml中新增屬性,比如: <application android:name="*******" android:allow

Android實現清除應用程式快取

我使用的是反射的方法來獲取某個應用程式的快取大小,但是沒能實現通過反射的方法來清除該應用快取,所以我只能呼叫系統的設定意圖來清除快取。而且在真機上沒什麼問題,模擬器上就有些問題了。 1.需要三個AIDL檔案 注意:在新增三個aidl檔案後一定要Rebuild Proje

android啟動其他應用的一段程式碼

private void startAppByPackageName(String packageName){PackageInfo pi = null;try {pi = getPackageManager().getPackageInfo(packageName, 0)

獲取Windows應用程式當前焦點控制元件的控制代碼

由於GetFocus只能本身程序呼叫,所以必須呼叫AttachThreadInput函式附加執行緒 HWND wnd;//視窗控制代碼 wnd=GetForegroundWindow();//獲得當前啟用的視窗控制代碼 DWORD SelfThreadId=GetCurre

Android 重啟應用程式 的兩種方式

/** * 重新啟動App -> 殺程序,會短暫黑屏,啟動慢 */ public void restartApp() { //啟動頁

android——徹底關閉——應用程式

最近學習做android的遊戲開發時候,發現一個關於android退出時不能徹底關閉的問題,比如:一個程式裡new 出了N多個Thread,這樣在退出程式的可能不能完全關閉,最後發現,只用finish()方法,有時候不能徹底退出,個人感覺還是要在適當的地方加上:Syste

在Qt中使用WindowsAPI來控制其他應用程式

     有時候我們可能想要讓一些桌面應用程式自動地執行一些操作,但是這類程式又沒有提供一些批量操作的方法或者程式設計介面。這時最容易的辦法恐怕就是使用WindowsAPI來模擬滑鼠或鍵盤的動作來操作這類應用程式了。     假設我們想操縱的應用程式是一個上傳檔案到網路的程

Android Studio修改應用程式的包名PackName

問題: 修改了一下包名,發現依據包名getPackageName()創建出來的資料夾還是原來的包名 分析: 只在AndroidManifest修改了 package的值,結果是不行的 還需要在b

vb.net 獲取當前應用程式所在的路徑

System.Environment.CurrentDirectory; //例: c:/test/ Application.ExecutablePath;(包括名稱) //例: c:/test/myapp.exe Application.StartupPath;(不