最近做了个小demo,需要在demo中访问其他apk中的信息。 网上版本很多,有用的很少。经过反复查阅和试验,总结了几种方法。
(1)demo很简单,页面上只有一个按钮,点击按钮可以访问其他apk中相应的activity。Demo的主要代码
如下:
package com.example.demo; import com.example.demo.R; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { method1(); } }); return true; } /* * 1.利用compnent方式访问其他apk的(主activity),无需设置androidmanifest.xml */ public void method1() { // 这些代码是启动另外的一个应用程序的主Activity ComponentName componetName = new ComponentName( // 这个是另外一个应用程序的包名 ,androidmanifest.xml中的package值!!! "com.amaker.test", // 这个参数是要启动的Activity (主activity) "com.amaker.test.MainActivity"); try { Intent intent = new Intent(); intent.setComponent(componetName); startActivity(intent); } catch (Exception e) { Toast.makeText(getApplicationContext(),"没有找到应用程序!!!", 0).show(); } } /* * 2.利用compnent方式访问其他apk的(非主activity),需要设置androidmanifest。xml中非主activity的exported属性,具体如下: * 被访问的activity是"com.amaker.ch03.drawable.TestBitmapActivity" 则需要设置的是:<activity android:name="com.amaker.ch03.drawable.TestBitmapActivity" android:exported="true"/> */ public void method2() { Intent intent = new Intent(); intent.setComponent(new ComponentName("com.amaker.test","com.amaker.ch03.drawable.TestBitmapActivity")); //"com.amaker.ch03.string.TestStringActivity")); //intent.setAction("android.intent.action.VIEW"); startActivity(intent); } /* * 3.设置androidmanifest.xml访问其他apk的(非主activity) * 注意:使用这种方式的时候需要在被调用的apk的androidmanifest.xml里做如下设置(访问非主activity) <activity * android:name="com.amaker.ch03.xml.TestXmlActivity"> <intent-filter> * <action android:name="android.intent.action.xml" /> <data * android:scheme="info" /> <category * android:name="android.intent.category.DEFAULT" /> </intent-filter> * </activity> */ public void method3() { Intent intent = new Intent("android.intent.action.xml", Uri.parse("info://调用其他应用程序的Activity")); startActivity(intent); } }
(2)被调用的工程的名字是:Chapter03_Resource.
这个android小工程,之所以可以被Demo调用,是因为AndroidManifest.xml被做了修改。具体代码如
下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.amaker.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.amaker.ch03.color.TestColorActivity"> <action android:name="android.intent.action.color" /> <category android:name="android.intent.category.DEFAULT" /> </activity> <activity android:name="com.amaker.ch03.string.TestStringActivity" android:exported="true"/> <activity android:name="com.amaker.ch03.dimen.TestDimensionActivity"/> <activity android:name="com.amaker.ch03.xml.TestXmlActivity"> <intent-filter> <action android:name="android.intent.action.xml" /> <data android:scheme="info" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.amaker.ch03.drawable.TestBitmapActivity" android:exported="true"/> <activity android:name="com.amaker.ch03.layout.TestLayoutActivity"/> <activity android:name="com.amaker.ch03.menu.TestMenuActivity"/> </application> <uses-sdk android:minSdkVersion="3" /> </manifest>
参照Demo中的注释即可理解。
相关推荐
Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然,也可以对其他应用程序的数据进行增、删、改操 作;Broadcast可以向android系统中所有应用程序发送广播,而需要跨进程通讯的...
但是,在不同应用程序之间进行数据的交互,也就是跨进程通讯,肯定是有实现的方法,今天我就来讲讲Activity与Activity之间是如何做到的。 在同一个应用程序中:只需指定Context对象和Activity的Class对象,如: ...
AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。 实现步骤 例:用 A程序去访问 B程序的MyService.java服务 在B中...
总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要指定一个Uri。当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从...
10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6...
本文实例为大家分享了Android使用AIDL方式实现播放音乐的具体代码,供大家参考,具体内容如下 思路: ① 新建两个APP项目或者Module,一个作为服务端,一个作为客户端,在服务端创建service ② 在两个module的...
10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6...
10.2 跨进程调用Service (AIDL服务) 382 10.2.1 AIDL服务简介 382 10.2.2 创建AIDL文件 383 10.2.3 将接口暴露给客户端 383 10.2.4 客户端访问AIDLService 385 10.3 电话管理器 ...
10.2 跨进程调用Service (AIDL服务) 382 10.2.1 AIDL服务简介 382 10.2.2 创建AIDL文件 383 10.2.3 将接口暴露给客户端 383 10.2.4 客户端访问AIDLService 385 10.3 电话管理器 (TelephonyManager) 393 10.4 ...
10.2 跨进程调用Service (AIDL服务) 382 10.2.1 AIDL服务简介 382 10.2.2 创建AIDL文件 383 10.2.3 将接口暴露给客户端 383 10.2.4 客户端访问AIDLService 385 10.3 电话管理器 (TelephonyManager) 393 10.4 ...
跨进程访问 8.4 118 网络 119 图形、音频、视频 120 图形 10.1 120 音频、视频 10.2 120 2D动画 121 帧动画 121 补间动画 121 OpenGL ES编程 122 Android支持的各种资源 123 窗口小部件(App Widget) 124 NDK编程 125
用户界面 软件接口 软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。 访问硬件的API库函数通讯接口 安卓android课程设计报告全文共5页,当前为第3页。HTTP 协议:有多种接口可以调用你可以用Java类库...
软件接口 软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。 4. 访问硬件的API库函数通讯接口 4 HTTP协议:有多种接口可以调用你可以用Java类库封装的HttpConnection或者用A pach的开源项目的HttpGet...