移动应用间调用(Android/iOS)

经常在一些应用中看到“相关推荐”这种功能,那么具体如何实现,这里给出几种方案:


Android

Component方式(显示调用)

被调用程序需要做如下配置:

        <activity
            android:name="com.freesoft.androiddemo.TestActivity"
            android:label="@string/app_name" 
            android:exported="true">
        </activity>

如果是非启动页面还需要加上:

android:exported=”true”

调用程序代码如下:

try {
				// Component方式启动
				Intent intent = new Intent(Intent.ACTION_MAIN);
				ComponentName componentName = new ComponentName(
						"com.freesoft.androiddemo",
						"com.freesoft.androiddemo.TestActivity");
				intent.setComponent(componentName);
				startActivity(intent);
			} catch (ActivityNotFoundException e) {
				// TODO: 下载客户端
				Log.v("MainActivity", "程序未安装");
			}

Action Name方式(隐式调用)

被调用程序需要如下配置:

        <activity
            android:name="com.freesoft.androiddemo.TestActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="com.freesoft.inappinteraction" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

注意:

  1. 所有需要能够被隐式启动的Activity都必须在intent-filter中设置category为DEFAULT。
  2. 不能仅靠category来启动程序 。例如这样的配置:

        <activity
            android:name="com.freesoft.androiddemo.TestActivity"
            android:label="@string/app_name">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.freesoft.inappinteraction"/>
            </intent-filter>
        </activity>

调用程序的代码如下:

			try {
				Intent intent = new Intent();
				intent.setAction("com.freesoft.inappinteraction");
				startActivity(intent);
			} catch (ActivityNotFoundException e) {
				// TODO: 下载客户端
				Log.v("MainActivity", "程序未安装");
			}

Action Data方式(隐式启动)

被调用程序需要如下配置:

 <activity
            android:name="com.freesoft.androiddemo.TestActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="com.freesoft.inappinteraction"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <!-- 
                Data的语法:
				<data android:host="string"
			      android:mimeType="string"
			      android:path="string"
			      android:pathPattern="string"
			      android:pathPrefix="string"
			      android:port="string"
			      android:scheme="string" />
                 -->
                <data android:scheme="iai" android:host="www.freesoft.com" />
            </intent-filter>
        </activity>

调用程序代码如下:

				// Action方式启动
				Intent intent = new Intent();
				intent.setAction("com.freesoft.inappinteraction");
//				Uri的格式:scheme://host:port/path or pathPrefix or pathPattern
				intent.setData(Uri.parse("iai://www.freesoft.com"));
				startActivity(intent);
			} catch (ActivityNotFoundException e) {
				// TODO: 下载客户端
				Log.v("MainActivity", "程序未安装");
			}

如何传递参数

需要传递参数的时候这样:

			try {
				// Action方式启动
				Intent intent = new Intent();
				intent.setAction("com.freesoft.inappinteraction");
//				Uri的格式:scheme://host:port/path or pathPrefix or pathPattern
				intent.setData(Uri.parse("iai://www.freesoft.com"));
				
				intent.putExtra("isPrivate", true);
				intent.putExtra("source", "www.freesoft.com");
				startActivity(intent);
			} catch (ActivityNotFoundException e) {
				// TODO: 下载客户端
				Log.v("MainActivity", "程序未安装");
			}




iOS平台

被调用程序设置:



还可以判断调用程序:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if ([sourceApplication isEqualToString:@"www.freesoft.com.Invoker"]) {
        //
    }
    
    return YES;
}

而调用程序的代码如下:

    NSURL *url = [[NSURL alloc] initWithString:@"iai://www.freesoft.com/iai?key=value"];
    [[UIApplication sharedApplication] openURL:url];




ok,通过以上步骤,即可完成程序间的互相调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值