`
功夫小当家
  • 浏览: 183757 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Intent方式跨进程访问

阅读更多

       最近做了个小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中的注释即可理解。

 

  

 

 

 

 

 

分享到:
评论

相关推荐

    详解Android 进程间通信的几种实现方式

    Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然,也可以对其他应用程序的数据进行增、删、改操 作;Broadcast可以向android系统中所有应用程序发送广播,而需要跨进程通讯的...

    Android跨进程通讯(1)Activity访问其他应用程序的Activity实现

    但是,在不同应用程序之间进行数据的交互,也就是跨进程通讯,肯定是有实现的方法,今天我就来讲讲Activity与Activity之间是如何做到的。 在同一个应用程序中:只需指定Context对象和Activity的Class对象,如: ...

    Android AIDL实现跨进程通信的示例代码

    AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。 实现步骤 例:用 A程序去访问 B程序的MyService.java服务 在B中...

    Android中进程之间通信的机制

    总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要指定一个Uri。当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从...

    Android实例代码

    10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6...

    Android使用AIDL方式实现播放音乐案例

    本文实例为大家分享了Android使用AIDL方式实现播放音乐的具体代码,供大家参考,具体内容如下 思路: ① 新建两个APP项目或者Module,一个作为服务端,一个作为客户端,在服务端创建service  ② 在两个module的...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6...

    疯狂Android讲义源码

     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 电话管理器  ...

    疯狂Android讲义.part2

    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 ...

    疯狂Android讲义.part1

    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 ...

    Android基础知识详解

    跨进程访问 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

    安卓android课程设计报告.docx

    用户界面 软件接口 软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。 访问硬件的API库函数通讯接口 安卓android课程设计报告全文共5页,当前为第3页。HTTP 协议:有多种接口可以调用你可以用Java类库...

    安卓android课程设计分析报告.doc

    软件接口 软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。 4. 访问硬件的API库函数通讯接口 4 HTTP协议:有多种接口可以调用你可以用Java类库封装的HttpConnection或者用A pach的开源项目的HttpGet...

Global site tag (gtag.js) - Google Analytics