明日から本気出す開発日記

2016/10/31 fc2ブログより引っ越しました。更新はまた明日から本気だす

AS3

【AIR for Android】カスタムURIスキームを使ってネイティブアプリからAIRアプリを起動

2016/10/31

【Adobe公式】Android カスタム URI スキーム
によると、「カスタム URI スキームを使用して、Web ページまたはネイティブ Android アプリケーションから、AIR アプリケーションを起動できます。」
と書かれています。

ですが、ほとんどのサイトにはブラウザから起動する方法しか書かれていません。
『ネイティブアプリから起動する方法なんて、ブラウザから起動できるのならわざわざ書かなくても当然だし^^ そもそもANE使え。』
ということなのかも知れませんが、困ったときにすぐに他の人のブログを参考にする僕のようなヘタレプログラマーにとっては、ネイティブアプリからの起動方法も誰かに書いてほしかった。
なので書きます。

■AIRアプリに固有のURIを設定する。マニフェストのxmlファイルに、以下のようにapplicationタグで囲まれた部分を追記します。

     <android>
        <colorDepth>16bit</colorDepth>
        <manifestAdditions><![CDATA[
            <manifest android:installLocation="auto">
                <!--See the Adobe AIR documentation for more information about setting Google Android permissions-->
                <!--android.permission.INTERNET 権限を削除すると、         デバイス上でアプリケーションをデバッグできなくなります-->
                <uses-permission android:name="android.permission.INTERNET"/>
                <!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>-->
                <!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>-->
                <!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>-->
                <!--AIR の SystemIdleMode API にアクセスするには、DISABLE_KEYGUARD 権限と         WAKE_LOCK 権限を同時に切り替える必要があります-->
                <!--<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>-->
                <!--<uses-permission android:name="android.permission.WAKE_LOCK"/>-->
                <!--<uses-permission android:name="android.permission.CAMERA"/>-->
                <!--<uses-permission android:name="android.permission.RECORD_AUDIO"/>-->
                <!--AIR の NetworkInfo API を使用するには、ACCESS_NETWORK_STATE 権限と         ACCESS_WIFI_STATE 権限を同時に切り替える必要があります-->
                <!--<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>-->
                <!--<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>-->
                
                <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"/> 
                            <span style="color:#FFFF33"><data android:scheme="jmsair"/></span> 
                    </intent-filter> 
                    </activity>
                </application>

これでこのアプリケーションのURIは「jmsair」に設定されました。

■ブラウザのハイパーリンクテキストから起動する方法
<a href="jmsair://">「jmsair」として登録したアプリを起動</a>

■ネイティブアプリから起動する方法

Intent intent = Intent.parseUri("jmsair://", Intent.URI_INTENT_SCHEME);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setComponent(null);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

これを使って、通知バー(Notification)をタップしたときにURIスキーム呼び出してAIRアプリが起動してくる。というのを作ってみた。

-AS3