1、scheme机制
(1)被调用的程序:
定义scheme和action
<activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="net.blogjava.mobile.MYACTION" /> <data android:scheme="info" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 处理其他应用传递过来的信息 // 获得其他应用程序传递过来的数据 if (getIntent().getData() != null ) { // 获得Host,也就是info://后面的内容 String host = getIntent().getData().getHost(); Bundle bundle = getIntent().getExtras(); // 其他的应用程序会传递过来一个value值,在该应用程序中需要获得这个值 String value = bundle.getString("value" ); …… } (2)调用的方式: // 需要使用Intent类的第2个参数指定Uri Intent intent = new Intent("net.blogjava.mobile.MYACTION" , Uri .parse("info://调用其他应用程序的Activity" )); // 设置value属性值 intent.putExtra("value" , "调用成功" ); // 调用ActionActivity中的Main startActivity(intent); (3)调用方可以通过packageManager.queryIntentActivities来判断scheme是否有效// Build the intentUri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);// Verify it resolves
PackageManager packageManager = getPackageManager();List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);boolean isIntentSafe = activities.size() > 0;// Start an activity if it's safe
if (isIntentSafe) { startActivity(mapIntent);} 其他的进程间通信的机制:Content Provider:对数据的增删改查。
Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。应用程序可以利用Content Provider完成下面的工作1. 查询数据2. 修改数据3. 添加数据4. 删除数据Broadcast:向对方的进程发送消息。
广播(Broadcast) 广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。AIDL服务:通过后台进程的方式提供访问的接口,类似web service的方式,只不过AIDL服务的“web”是指本地的应用程序。
服务(Service)是android系统中非常重要的组件。Service可以脱离应用程序运行。也就是说,应用程序只起到一个启动Service的作用。一但Service被启动,就算应用程序关闭,Service仍然会在后台运行。