大家好,我是奶綠茶
最近案子的需要,所以會用 Android 和 AIR 來混搭開發 app
遇到的問題有:
1.Android 怎麼啟動另一個 App(Andoird or AIR) ?
2.啟動後,如何帶變數過去?
3.反過來 AIR 啟動 Andoird 且帶值?
先了解 Android 怎麼啟動另一個 App.
使用 Intent 類別, 且指定要啟動的 app package路徑
new ComponentName("air.com.android.settings", "air.com.android.settings.fuelgauge.PowerUsageSummary");
第二個問題是啟動後,如何帶變數過去?
只要在 intent 使用 putExtra 即可 intent.putExtra("Key", "Value");
接收的 Activity 在 onCreate();
使用 getIntent().getExtras().getString("Key");
但在 AIR 的部份,無法修改 onCreate ,所以只好找另外的方法。
好在 Android 的機制裡,可以使用 scheme 的方法呼叫, 像 market:// 這樣,
當遇到這樣的連結時,只要 app 有在 mainfest 設定 intent-filter 的話,就會啟動該 app.
在這我們以:testapp:// 為例 Android 端:
轉載請註明出處
參考文章:
http://www.riaspace.com/2011/08/defining-custom-url-schemes-for-your-air-mobile-applications
http://stackoverflow.com/questions/5591086/passing-parameters-from-a-java-activity-to-adobe-air-app
http://www.slideshare.net/CodeAndroid/android-intent-intent-filter-broadcast-receivers
最近案子的需要,所以會用 Android 和 AIR 來混搭開發 app
遇到的問題有:
1.Android 怎麼啟動另一個 App(Andoird or AIR) ?
2.啟動後,如何帶變數過去?
3.反過來 AIR 啟動 Andoird 且帶值?
先了解 Android 怎麼啟動另一個 App.
使用 Intent 類別, 且指定要啟動的 app package路徑
Intent intent = new Intent( Intent.ACTION_MAIN , null); intent.addCategory( Intent.CATEGORY_LAUNCHER); final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary"); intent.setComponent(cn); startActivity(intent);如果是要啟動 AIR 的 app. 就要在 package 前加上 air.
new ComponentName("air.com.android.settings", "air.com.android.settings.fuelgauge.PowerUsageSummary");
第二個問題是啟動後,如何帶變數過去?
只要在 intent 使用 putExtra 即可 intent.putExtra("Key", "Value");
接收的 Activity 在 onCreate();
使用 getIntent().getExtras().getString("Key");
但在 AIR 的部份,無法修改 onCreate ,所以只好找另外的方法。
好在 Android 的機制裡,可以使用 scheme 的方法呼叫, 像 market:// 這樣,
當遇到這樣的連結時,只要 app 有在 mainfest 設定 intent-filter 的話,就會啟動該 app.
在這我們以:testapp:// 為例 Android 端:
Uri uri = Uri.parse("testapp://com.example/milkmidi/tesetdata"); intent = new Intent( Intent.ACTION_VIEW, uri);AIR 端:在 application.xml 裡加上 <data android:scheme="testapp" android:host="com.example" /> 當遇到是 testapp://com.example 這樣的連結時,就可以啟動 AIR 的 app.
<android> <manifestAdditions><![CDATA[ <manifest android:installLocation="auto"> <application> <activity > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="testapp" android:host="com.example" /> </intent-filter> </activity> </application> </manifest> ]]></manifestAdditions> </android>得到變數可以使用:
NativeApplication.nativeApplication.addEventListener( InvokeEvent.INVOKE, onInvoke); private function onInvoke(e:InvokeEvent):void { log( "onInvoke:" + e.arguments ); }完成
轉載請註明出處
參考文章:
http://www.riaspace.com/2011/08/defining-custom-url-schemes-for-your-air-mobile-applications
http://stackoverflow.com/questions/5591086/passing-parameters-from-a-java-activity-to-adobe-air-app
http://www.slideshare.net/CodeAndroid/android-intent-intent-filter-broadcast-receivers
留言
請問如果AIR(2.5)要啟動Andoird的App有什麼方法呢?
我嘗試在Andoird端加入<data android:scheme=....
然後AIR端用navigateToURL去開啟這個自訂的URI,
但會拋出錯誤(SecurityError: Error #2193)。
查詢help的navigateToURL發現一段...
"在 AIR 3 及更新版本中,任何 URI 配置都可以用在要啟動的 URL。"
所以意味著我沒法在AIR2.5使用這個方式吧?
老師能否提供一些建議呢?
那你有試著在 AIR3 裡用過嗎
想請問您要如何從AIR App利用URL過程中帶值,
開啟Android App能接收到AIR App傳來的值?
1. 該 Android App 是你寫的,因為要需要 mainefest.xml 加入程式
2. 如果是別人寫的,就需要寫 NatvieExtenstion, 用 AIR 呼叫 Android 原生 Code
也能從Android app夾帶uri把值傳到AIR app,
想嘗試從AIR app 帶值傳送到Android app,
不好意思,麻煩奶老師解惑了。
http://developer.android.com/intl/zh-tw/training/basics/intents/filters.html