`

调用其他应用

 
阅读更多

 

Android中有Context的概念,有了Context就可以做很多事情,如打开activity、发送广播、打开文件夹和数据库、获取

 

classLoader、获取资源等等。

 

那么能获取到手机上其他应用的Context吗?

能!有了其他应用的Context,几乎就可以做其他应用能做的任何事。


示例:
下面这个类是手机上的某个应用
package com.example;

import android.app.Activity;
import android.util.Log;

public class InvokedActivity extends Activity {
	public void print(String msg) {
		Log.i("IA", msg);
	}
}
 

下面代码是我的应用,去调用上面那个类的print方法
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:id="@+id/invoke"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="调用其它应用方法" />
</LinearLayout>
 
package com.invoke;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class TestActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        findViewById(R.id.invoke).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				invokeOtherPackage();
			}
		});
    }
    
    private void invokeOtherPackage() {
    	try {
    		/*
    		 CONTEXT_INCLUDE_CODE: 包含代码,可以执行此包中的代码。
    		 CONTEXT_IGNORE_SECURITY: 忽略安全警告,不加有此功能不能用,会得到安全警告。
    		 */
    		Context otherPackageContext = this.createPackageContext("com.example", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
    		if (otherPackageContext != null) {
    			//载入类
    			Class clazz = otherPackageContext.getClassLoader().loadClass("com.example.InvokedActivity");
    			if (clazz != null) {
    				//创建实例
    				Object obj = clazz.newInstance();
    				//获取并执行print方法
    				clazz.getMethod("print", String.class).invoke(obj, "Ask in TestActivity");
    			} else {
    				showMessage("没有获取到类");
    			}
    		} else {
    			showMessage("没有获取到其它包上下文");
    		}
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    private void showMessage(String message) {
    	Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
}
 

当点击按钮时,会调用其他应用的方法(InvokedActivity的print方法),该方法输入如下


可能你在想,是不是只有当两个应用是同一个keystore签名才可以相互调用?当不同keystore签名就不能相互调用?
错,不同keystore签名一样可以调用,这个我测试过了。

不要使用此功能来破坏其他应用,厚道点为好。
 
  • 大小: 4.3 KB
分享到:
评论

相关推荐

    c#调用其他应用程序

    在C#编程中,调用其他应用程序是一项常见的任务,这涉及到进程管理和权限控制。下面将详细探讨这个主题,包括如何在C#中启动其他应用程序、处理不同级别的用户权限,以及与管理员权限相关的操作。 首先,让我们看看...

    VFP中调用其他应用程序的方法[文].pdf

    使用RUN命令调用应用程序 最直接的方法是使用`RUN`命令。它允许开发者直接运行指定路径下的应用程序。例如,启动Windows目录下的图画板程序并打开特定的图片文件: ```vfp RUN/n3 C:\Windows\Pbrush.exe c:\...

    web调用本地应用程序.zip

    在IT领域,"Web调用本地应用程序"是一个重要的技术主题,尤其在构建混合式应用时。这个主题涉及到如何从Web应用程序中启动、控制或者与用户的本地应用程序进行交互。以下是对这个主题的详细解释: 首先,我们要理解...

    web调用本地应用程序exe例子

    服务器接收到请求后,调用预设的本地exe,可能是通过`System.Diagnostics.Process`类(在.NET中)或其他类似机制。 4. 应用程序exe执行所需任务并可能产生一些输出。 5. 服务器收集exe的输出,然后将其回传给Web...

    jap调用应用程序

    ### jap调用应用程序 #### 一、引言 在现代软件开发中,特别是在Web应用领域,JSP(Java Server Pages)技术被广泛应用于构建动态网页。然而,在某些情况下,Java程序可能需要与其他非Java应用程序进行交互,以...

    IOS应用源码之应用之间调用.zip

    这在应用A需要调用应用B的功能时非常有用。 1. **URL Scheme的注册**:在`Info.plist`文件中,你需要添加一个`CFBundleURLTypes`键,其值是一个数组,包含一个字典。字典中`CFBundleURLSchemes`键的值是你的自定义...

    c#窗体嵌入调用应用程序

    总结,C#窗体嵌入调用应用程序主要涉及`Process`类和`ProcessStartInfo`对象的使用,通过它们可以实现对外部.exe程序的启动、控制和通信。在实际开发中,要确保对可能出现的异常进行妥善处理,并根据需求调整进程的...

    C#跨应用程序调用。项目可以启动其他程序获取输出

    在C#编程中,跨应用程序调用是一种常见的需求,它允许一个程序启动、控制或通信与其他已安装在系统上的程序。这种技术对于实现系统集成、自动化任务或是扩展应用程序功能非常有用。本文将深入探讨如何使用C#进行跨...

    实例25 调用Windows应用程序

    `lpFile`参数是我们要启动的应用程序的路径,其他参数可以用来指定命令行参数、工作目录以及显示模式。 通过这个实例,初学者不仅能学会如何在PowerBuilder中调用Windows应用程序,还能了解到如何与Windows API进行...

    应用程序的调用实例

    调用应用程序,简单来说,就是启动或激活这些程序来完成我们想要的操作。 调用应用程序的方式有很多种,下面列举几种常见的方法: 1. **桌面快捷方式**:大多数操作系统允许用户创建应用程序的快捷方式,双击快捷...

    ios一个app应用内部调用另一个新的app应用

    你需要构造一个包含被调用应用URL Scheme的URL,并传递给`openURL:`方法。 4. **传递参数**:如果需要在调用时传递数据,这些数据可以编码到URL的查询字符串中。例如,`appa://open?param1=value1&param2=value2`。...

    iOS 调用外部程序

    本文将深入探讨如何在iOS应用中实现对其他程序的调用,以及系统程序的交互。 首先,我们需要理解什么是URL Scheme。URL Scheme是一种规范,它定义了如何通过URL来启动特定的应用程序。每个应用程序都可以注册自己的...

    java实现微信企业号和公众号服务端调用方法封装源码

    1.6 获取应用素材总数以及每种类型素材的数目 1.7 创建菜单 1.8 删除菜单 1.9 获取菜单列表 2、微信公众号服务端调用方法java源码实现 2.1 在回调模式下验证服务器接口地址 2.2 检验消息的真实性,并且获取解密后的...

    AIR2.0 调用应用程序 exe bat jar com 修正

    AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正AIR2.0 调用应用程序 修正 ...

    易语言API调用对话框应用模块

    本模块主要关注的是API调用对话框的应用。 对话框在编程中扮演着重要的角色,它是用户与程序交互的窗口,通常用于显示警告、获取用户输入或执行特定操作。API调用对话框则是利用系统级的函数来创建和管理这些对话框...

    labview调用外部应用程序ShellExecute.vi

    使用labview2013中文版编辑,调用shell中的ShellExecute实现打开外部应用程序,VI有详细说明,参数如下: int32_t ShellExecuteA(int32_t hwnd, int32_t lpOperation, CStr paramenters, CStr 参数4, CStr directory...

    从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法

    本文主要介绍一种现在主流的处理方法,即利用自定义 URL Protocol 来调用应用程序。这种方法可以在 web 上调用 java 打包之后的 jar 应用程序,或者调用 exe 应用程序。 主要实现步骤如下: 1. 添加自定义 URL ...

    Web调用本地Android应用

    为了防止应用未安装的情况,我们通常会先检查应用是否已安装,未安装时可以跳转到Google Play或其他应用商店下载页面。 ```javascript function openApp() { if (isAppInstalled()) { appBridge.openApp(); } ...

    VHDL语言中的元件调用方法应用

    VHDL语言中的元件调用方法应用 在VHDL语言中,元件调用是指在电路设计中使用已经定义的电路模块(实体),以便在设计中重复使用这些模块,提高设计效率和可读性。元件调用方法可以分为两大类:组件调用和实例调用。...

    C#应用程序调用C#编写的dll,C#编写的dll调用C++编写的dll

    C# DLL是.NET框架中的一个可重用组件,它包含一组方法和属性,可供其他应用程序使用。创建C# DLL需要遵循以下步骤: 1. **创建C#类库项目**:在Visual Studio中,选择新建项目,然后选择"类库(C#)"模板。这将创建一...

Global site tag (gtag.js) - Google Analytics