当前位置:首页 > 开发 > 移动开发 > 正文

使用Intent方式跨进程访问

发表于: 2013-07-10   作者:功夫小当家   来源:转载   浏览:
摘要:        最近做了个小demo,需要在demo中访问其他apk中的信息。 网上版本很多,有用的很少。经过反复查阅和试验,总结了几种方法。   (1)demo很简单,页面上只有一个按钮,点击按钮可以访问其他apk中相应的activity。Demo的主要代码      &nb

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

 

  

 

 

 

 

 

使用Intent方式跨进程访问

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号