一、先來幾行代碼,一個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
下一篇:微信小程序基礎(chǔ)入門