1. 程式人生 > >兩個android程式間的相互呼叫傳遞引數

兩個android程式間的相互呼叫傳遞引數

兩個App之間相互切換呼叫

  • App之間跳轉傳遞引數
  • 需要注意事項

App之間跳轉傳遞引數

假設現在有兩個App暫時命名為A,B兩個應用,A如果要跳轉到B應用當中需要配置一下程式碼:(本文簡單建立兩個簡單應用,如果需要看效果圖,請檢視轉載的網頁)

應用A中你所需跳轉的:

 /**
   * @param v 設定按鈕點選事件
   */
    @Override
    public void onClick(View v) {
        super.onClick(v);
        switch (v.getId()) {
            case R.id.tv_content://跳轉點選事件
            //ComponentName 做跳轉,第一個引數傳遞是B應用的包名,第二個引數傳遞的是你所需要跳轉到B應用的介面
                try
{ ComponentName componentName = new ComponentName("com.example.intentActivity2", "com.example.intentActivity2.SecondActivity"); Intent intent = new Intent(); // Intent intent = new Intent("chroya.foo"); Bundle bundle = new Bundle(); bundle.putString("args"
, "我就是跳轉過來的"); intent.putExtras(bundle); intent.setComponent(componentName); startActivity(intent); } catch (ActivityNotFoundException e) { //判斷是否安裝B應用,提供下載連結 NameToast.show(mContext, "請下載----"
+ "com.example.intentActivity2"); e.printStackTrace(); } break; } }

應用B中所需配置:

在應用B中我建立了兩個類,一個是應用類的入口activity,一個是自定義的activity,我會在下面做出說明和區別:

package com.example.MainActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

/**
 * 專案名稱:intentActivity2
 * 類描述:
 * 建立人:許仙仙
 * 建立時間:2015/10/16 16:34
 * 修改人:許仙仙
 * 修改時間:2015/10/16 16:34
 * 修改備註:
 */
public class MainActivity extends Activity {
    private TextView tv_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.tv_content = (TextView) this.findViewById(R.id.tv_content);
        Intent intent = getIntent();
        String value = intent.getStringExtra("args");
        if (value != null && !value.equals("")) {
            tv_content.setText("應用入口"+value);//這裡將顯示“這是跳轉過來的!來自apkA”
        } else {
            tv_content.setText("空的引數");
        }
    }
}
package com.example.intentActivity2;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

/**
 * 專案名稱:intentActivity2
 * 類描述:
 * 建立人:許仙仙
 * 建立時間:2015/10/16 16:34
 * 修改人:許仙仙
 * 修改時間:2015/10/16 16:34
 * 修改備註:
 */
public class SecondActivity extends Activity {
    private TextView tv_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.tv_content = (TextView) this.findViewById(R.id.tv_content);
        Intent intent = getIntent();
        String value = intent.getStringExtra("args");
        if (value != null && !value.equals("")) {
            tv_content.setText("自定義activity"+value);//這裡將顯示“這是跳轉過來的!來自apkA”
        } else {
            tv_content.setText("空的引數");
        }
    }
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.intentActivity2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name="com.example.intentActivity2.MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.intentActivity2.SecondActivity"
            android:exported="true">
            <action android:name="chroya.foo" />
            <category android:name="android.intent.category.DEFAULT" />
        </activity>
    </application>

</manifest>

大家看到上文A應用中有一段Intent中是加入了引數的:
方法1: Intent intent = new Intent();
方法2:Intent intent = new Intent(“chroya.foo”);
方法1中沒有傳入引數,一般是呼叫B應用入口類
方法2則是給Activity介面給一個自定義命名

注意事項

方法二中,在清單檔案中我們需要配置這個自定義命名類一個屬性android:exported=”true”,如果沒有配置呼叫的時候會出現ActivityNotFoundException異常,表示沒有找到相關類。程式碼量比較小,我就不上傳原始碼了。如果哪裡寫的有問題,還請大家一起指正。