在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 啟動另一個 App/apk 中的 Activity
多分辨率適配常用目錄
Android 開發(fā)環(huán)境(Eclipse+ADT+Android 5.0)
Android 原型設(shè)計工具探索
Makefile 快速入門
Android Studio的NDK開發(fā)
人臉檢測-靜態(tài)
getprop 與 dumpsys 命令
Maven 編譯開源二維碼掃描項(xiàng)目 zxing
畫布 Canvas
組合控件
Linux 下的模擬器硬件加速
讀取 Excel
android.hardware.camera2 使用指南
橫豎屏切換
Ubuntu 下切換 JDK 版本
拍照和錄像 with Camera
文本與布局
按鈕控制 ViewPager 的左右翻頁
用 TableLayout 偽裝表格顯示數(shù)據(jù)
Preference Activity 使用詳解
模擬器如何重啟?試試 Genymotion!
獲得屏幕物理尺寸、密度及分辨率
語音識別
了解 native activity
Android Studio 導(dǎo)入第三方類庫、jar 包和 so 庫
啟動另一個 App/apk 中的 Activity
APK 簽名
兩個開源的圖表/報表控件
android studio 導(dǎo)出 jar 包(Module)并獲得手機(jī)信息
圖片的 Base64 編解碼
混淆與反編譯
Android Studio 和 Gradle
Android 5.1 SDK 下載與配置
persistableMode 與 Activity 的持久化
adb 取出安裝在手機(jī)中的 apk
Android Studio 中的源代碼管理
Handler 使用中可能引發(fā)的內(nèi)存泄漏

啟動另一個 App/apk 中的 Activity

Android 提供了在一個 App 中啟動另一個 App 中的 Activity 的能力,這使我們的程序很容易就可以調(diào)用其他程序的功能,從而就豐富了我們App的功能。比如在微信中發(fā)送一個位置信息,對方可以點(diǎn)擊這個位置信息啟動騰訊地圖并導(dǎo)航。這個場景在現(xiàn)實(shí)中作用很大,尤其是朋友在陌生的環(huán)境找不到對方時,這個功能簡直就是救星。

本來想把本文的名字叫啟動另一個進(jìn)程中的 Activity,覺得這樣才有逼格。因?yàn)槊總€ App 都會運(yùn)行在自己的虛擬機(jī)中,每個虛擬機(jī)跑在一個進(jìn)程中。但仔細(xì)一想,能夠稱為一個進(jìn)程,前提是這個 App 必須要運(yùn)行起來才行。而 Android 提供的能力,是不需要另一個 App 啟動就可以將其特定的 Activity 啟動起來的。

我們有至少兩種辦法達(dá)到啟動另一個 App 中的 Activity,第一種用action啟動,詳情見我之前的文章《啟動自己另一個程序的 activity》。

第二種用 intent 設(shè)置 className 或 component 的辦法啟動。舉例如下。新建兩個項(xiàng)目 ProjectA 和 ProjectB,用 B 中的 MainActivity 啟動 A 的 MainActivitity。關(guān)鍵代碼如下:

ProjectB MainActivity

       public void OnStartActivityClicked(View view) {
            Intent intent = new Intent(Intent.ACTION_VIEW);

            String packageName = "com.lazytech.projecta";
            String className = "com.lazytech.projecta.MainActivity";
            intent.setClassName(packageName, className);

            //second method
    //        intent.setComponent(new ComponentName(
    //                "com.lazytech.projecta",
    //                "com.lazytech.projecta.MainActivity"
    //        ));
            Bundle bundle = new Bundle();
            bundle.putString("msg", "this message is from project B ");
            intent.putExtras(bundle);

            intent.putExtra("pid", android.os.Process.myPid());

            startActivityForResult(intent, 1);
    //        startActivity(intent);
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
                case 1:
                    if(resultCode == RESULT_OK) {
                        textView.setText(data.getStringExtra("result"));
                    }
                    break;
            }
        }

ProjectA MainActivity

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView)findViewById(R.id.text);

            Intent intent = getIntent();
            if(intent != null) {
                textView.setText(intent.getStringExtra("msg"));
            }
        }

        public void OnSendResult(View view) {
            Intent intent = new Intent();
            intent.putExtra("result","OK! from project a.");
            this.setResult(RESULT_OK,intent);
            this.finish();
        }