无码人妻精一区二区三区,eeuss影院www在线观看,无码精品久久久久久人妻中字,日韩av高清在线看片

推薦新聞
Android 一個app啟動另一個app
發(fā)布者:深藍互聯(lián)
發(fā)布時間:2019-08-29
點擊:次

一、先來幾行代碼,一個app啟動另一個app

1
2
3
4
5
6
7
8
9
10
11
12
// 通過包名獲取要跳轉(zhuǎn)的app,創(chuàng)建intent對象
Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.liuxiang");
// 這里如果intent為空,就說名沒有安裝要跳轉(zhuǎn)的應(yīng)用嘛
if (intent != null) {
    // 這里跟Activity傳遞參數(shù)一樣的嘛,不要擔心怎么傳遞參數(shù),還有接收參數(shù)也是跟Activity和Activity傳參數(shù)一樣
    intent.putExtra("name""Liu xiang");
    intent.putExtra("birthday""1983-7-13");
    startActivity(intent);
else {
    // 沒有安裝要跳轉(zhuǎn)的app應(yīng)用,提醒一下
    Toast.makeText(getApplicationContext(), "喲,趕緊下載安裝這個APP吧", Toast.LENGTH_LONG).show();
}

這里或許網(wǎng)上有很多類似代碼,還是提一下,讓大家知道流程。

二、被啟動的app如何獲取參數(shù)呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            String name = bundle.getString("name");
            String birthday = bundle.getString("birthday");
            if (name != null && birthday != null) {
                Toast.makeText(getApplicationContext(), "name:" + name + " birthday:" + birthday, Toast.LENGTH_SHORT).show();
            }
        }
    }
}

在被打開的app應(yīng)用,也是簡單地幾行代碼可以接收到傳過來的參數(shù)信息。這里的bundle如果為空,就說明不是跳轉(zhuǎn)過來的,可能是用戶收到點擊桌面圖標打開app,這樣肯定就沒有參數(shù)值啦。趕緊玩玩吧。

等等,,,別以為,就這樣完了,還有更重要的在后面呢:怎么保證沒次跳轉(zhuǎn)都能接收到參數(shù)呢,這個要考慮下了。

三、遇到的問題:無法每次跳轉(zhuǎn)都拿到參數(shù),這是為什么呢?

經(jīng)過研究,必須每次都要打開啟動的Activity才能接收到,因為傳遞過來的參數(shù)就是送到啟動的Activity(android.intent.action.MAIN),在其他Activity怎么能拿到參數(shù)數(shù)據(jù)。所以必須每次跳轉(zhuǎn)過來都要第一個打開啟動的Activity,這是一種解決方法。

為了保證被打開app每次都進入啟動的Activity,這里寫一個歡迎頁面(WellcomeActivity)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class WellcomeActivity extends Activity {
    private final static int MSG_200 = 200;
     
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MSG_200:
                Intent intent = new Intent(WellcomeActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
                break;
 
            default:
                break;
            }
        }
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wellcome);
         
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            String name = bundle.getString("name");
            String birthday = bundle.getString("birthday");
            if (name != null && birthday != null) {
                Toast.makeText(getApplicationContext(), "name:" + name + "    birthday:" + birthday, Toast.LENGTH_SHORT).show();
                TextView t = (TextView)findViewById(R.id.tv_wellcome);
                t.setText("name:" + name + "    birthday:" + birthday);
            }
        }
         
        mHandler.sendEmptyMessageDelayed(MSG_200, 3000);
         
    }
 
    @Override
    public void onBackPressed() {
    }
}

這里每次都可以拿到參數(shù)了,可以做自己想做的事情了,可以保存到ShareMamager或者數(shù)據(jù)庫,做相應(yīng)地操作。

然后再進入Activity (MainActivity)

1
2
3
4
5
6
7
8
9
10
11
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
         
    }
     
}

四、再補充一下,AndroidManifest.xml的配置

被打開的app,配置注意一下,挺關(guān)鍵的,參考下

啟動Activity要android:launchMode="singleInstance",其他Activity要android:launchMode="singleTop",這樣比較好吧,有時間自己查下launchMode的用途,這里就不多說了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.liuxiang"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.liuxiang.WellcomeActivity"
            android:label="@string/app_name"
            android:clearTaskOnLaunch="true"
            android:launchMode="singleInstance" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.liuxiang.MainActivity"
            android:launchMode="singleTop" >
        </activity>
    </application>
 
</manifest>

本文地址:http://www.cnblogs.com/liqw/p/3968340.html

 

關(guān)注深藍互聯(lián)公眾號
Copyright ? 2013-2025 深藍互聯(lián) 版權(quán)所有
友情鏈接: