Android中如何处理其他应用程序的呼入

举例说明,“电话簿”里存有“路人甲”的个人信息,并记录着详细地址;点击该地址之后会自动跳转到”Google Map”,并用详细地址关键字进行检索;概要的说,就是在“电话簿”里呼出”Google Map”;本文将以1个Demo为例对该部分知识进行阐述。

一、效果图展示

android 4j-contacts-address-search-contacts-view    android 4j-contacts-address-search-contacts-onclick
android 4j-contacts-address-search-app-welcome    android 4j-contacts-address-search-app-searching

二、知识点

1. 通过配置”AndroidManifest.xml”监听该类Intent

首先,必须得知晓该操作所发出的Intent为何类别,包含哪些数据信息;有1个简单可行之法,就是在”DDMS”中查看该操作所输出的Log,例如:
04-22 04:57:55.854: I/ActivityManager(206): START {act=android.intent.action.VIEW dat=geo:0,0?q=上海市淮海中路775号 cmp=android/com.android.internal.app.ResolverActivity} from pid 8722

其次,通过抽象上文中的Log信息来配置”AndroidManifest.xml”,进而达到监听该类Intent的效果,具体配置如下:

<activity
	android:name=".IntentReceiverActivity" >
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:scheme="geo" />
	</intent-filter>
</activity>

也就是说,利用”IntentReceiverActivity”来接受并处理该类Intent。加入该段代码之后,就能达到如下效果:应用出现在呼出应用程序列表中,即第2幅图所示。

2. 如何启动应用程序

只需在”IntentReceiverActivity”中加入如下代码即可:

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	startActivity(getPackageManager().getLaunchIntentForPackage(getPackageName()));
}

3. 存储地址关键字

在”IntentReceiverActivity”的onResume中做如下处理:

@Override
protected void onResume() {
	super.onResume();
	Common.setIsFromContactsFlag(true);
	Common.setAddress(getAddressFromIntent(getIntent()));
	finish();
}

4. 使用关键字进行检索

在”MainActivity”中做如下处理:

@Override
protected void onResume() {
	super.onResume();

	if (Common.getIsFromContactsFlag()) {
		String address = Common.getAddress();

		if ((address == null) || (address.length() < 1)) {
			showToast(R.string.main_address_invalid);
		} else {
			showProgressDialog(address);
		}

		Common.setAddress(null);
		Common.setIsFromContactsFlag(false);
	}
}

三、补充说明

1. “WelcomeActivity”和”MainActivity”之间的关联

程序启动时开启”WelcomeActivity”,也就是说”WelcomeActivity”为”android.intent.category.LAUNCHER”;在Welcome画面”Loaing…”数秒之后迁移到”MainActivity”,即地址检索是在Main中进行。

2. 该部分代码不一定在所有手机上都适用

不同手机的“电话簿”中按下“详细地址”所发出的Intent信息不尽相同,不仅与AndroidSDK版本有关,而且还与手机型号有关,因为很多手机都是定制ROM;当前代码仅仅针对”Galaxy Nexus”而言。

3. 该工程在Eclipse中目录结构

android 4j-contacts-address-search-eclipse

四、源码下载

http://7xl53s.com1.z0.glb.clouddn.com/download/2015/08/src/4j-contacts-address-search.zip

Author: 四勾 4J

via 4jplus.com

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax