Android 中如何從一個App啟動另外一個App(如啟動支付介面、啟動地圖介面、應用商場下載App等情境)

來源:互聯網
上載者:User

標籤:通過   建立   null   xxx   efault   net   put   art   tap   

  假定兩個App,分別是A和B,當A運行某個功能需要啟動B,一種是啟動B應用,一種直接進入B的某個Activity。搜了很多資料,沒有一個完整的。下面就A--Android5.1.1、B--Android7.1.1,實際華為平板Android5.1.1,EMUI3.1,解析度1280*800進行測試。關鍵是Manifest檔案設定及啟動代碼參數設定。

1、A啟動整個B(代碼來自:http://blog.csdn.net/mad1989/article/details/38090513)

doStartApplicationWithPackageName("B的包完整命名");

private void doStartApplicationWithPackageName(String packagename) {

// 通過包名擷取此APP詳細資料,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = getPackageManager().getPackageInfo(packagename, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo == null) {
return;
}

// 建立一個類別為CATEGORY_LAUNCHER的該包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);

// 通過getPackageManager()的queryIntentActivities方法遍曆
List<ResolveInfo> resolveinfoList = getPackageManager()
.queryIntentActivities(resolveIntent, 0);

ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
// packagename = 參數packname
String packageName = resolveinfo.activityInfo.packageName;
// 這個就是我們要找的該APP的LAUNCHER的Activity[組織形式:packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
// LAUNCHER Intent
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

// 設定ComponentName參數1:packagename參數2:MainActivity路徑
ComponentName cn = new ComponentName(packageName, className);

intent.setComponent(cn);
startActivity(intent);
}
}

2、A啟動B中某一個Activity,B中參數設定

需要在Manifest中對該Activity進行詳細設定,如下:

<activity
android:name="com.example.XXXXActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.example.intent.action.XXXX_ACTION" />

<category android:name="com.example.intent.category.XXXX_CATEGORY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

標紅處非常關鍵,在A中需要引用

3、A啟動B中某一個Activity,A中代碼

Intent intent1 = new Intent();
intent1.setAction("com.example.intent.action.XXXX_ACTION");
intent1.addCategory("com.example.intent.category.XXXX_CATEGORY");

startActivity(intent1);

4、需要給B中的Activity傳遞參數,如下:

intent1.putExtra("res_w", 1280);
intent1.putExtra("res_h", 800);

5、B中獲得這些參數,如下:

mWidth = getIntent().getIntExtra("res_w", 1280);
mHeight = getIntent().getIntExtra("res_h",800);

 

Android 中如何從一個App啟動另外一個App(如啟動支付介面、啟動地圖介面、應用商場下載App等情境)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.