4

ICS+ 電話を対象としたアプリケーションを開発しています。

アプリケーションには、スプラッシュ スクリーンと、スプラッシュ スクリーンから、または NFC タッチ経由で起動できる他のいくつかのスクリーンがあります。私のアクティビティの 1 つに、次のインテント フィルタが含まれています。

        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="application/com.myapp.thing.android.beam.ip" />
        </intent-filter>

何らかの理由で、上記のインテント フィルターを含むアクティビティが起動されるたびに、ユーザーが [ホーム] ボタンを押したときに、アクティビティが [最近のアプリ] リストに表示されません。デバッガーを介して、破棄されていないことを確認しました。停止しただけです。

ThingActivity の前にスプラッシュ画面が開いていた場合、ホーム ボタンが押されたときに最上位のアクティビティではなくても、スプラッシュが最近のアプリ リストに表示されます。[最近のアプリ] リストでスプラッシュをクリックすると、以前は一番上にあったアクティビティではなく、スプラッシュが表示されます。bg でスレッドとレシーバーをまだ実行しているにもかかわらず、スプラッシュ画面の上のアクティビティが「失われた」ように見えます。

より奇妙な動作は、この動作が、NFC インテント フィルターを含むアクティビティから起動されたアクティビティ、またはそれらのアクティビティから起動されたアクティビティなどにも適用されることです。

インテント フィルターを削除すると、この動作はなくなり、一番上にあったアクティビティは常に [最近のアプリ] リストに表示されますが、NFC はコア機能であるため、機能しなくなります。

私の完全なマニフェストは次のとおりです。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp.thing"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="16" />
<!-- Permission required to use the TCP transport -->
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<!-- Permission required to use the Bluetooth transport -->
<uses-permission android:name="android.permission.BLUETOOTH" >
</uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" >
</uses-permission>
<uses-permission android:name="android.permission.BROADCAST_STICKY" >
</uses-permission>
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- RECORD_AUDIO is needed to create an audio recorder -->
<uses-permission android:name="android.permission.RECORD_AUDIO" >
</uses-permission>

<!-- MODIFY_AUDIO_SETTINGS is needed to use audio effects such as environmental reverb -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" >
</uses-permission>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".ui.SplashActivity"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.myapp.thing.ui.ReceiverActivity"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name="com.myapp.thing.ui.BaseActivity"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name="com.myapp.thing.ui.BroadcasterActivity"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name="com.myapp.thing.ui.ChooseFileActivity"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name="com.myapp.thing.ui.ThingActivity"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="application/com.myapp.thing.android.beam.ip" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="audio/*" />
        </intent-filter>
    </activity>

    <service
        android:name="com.myapp.thing.service.ThingService"
        android:label="ThingService" >
    </service>
</application>

このインテント フィルターを含めると、アプリケーションが最近のアプリ リストに表示されなくなるのはなぜですか?

4

1 に答える 1

2

説明されているすべての動作を理解しているわけではありませんが、認めざるを得ません。Android がアクティビティとタスクを処理する方法は、非常に扱いにくい場合があります。おそらく重要な情報の 1 つは、アクティビティが NFC インテントを介して起動されると、別のタスクとして起動されるということです。それはあなたが観察している行動に関係していると思います。

于 2013-03-15T13:30:49.903 に答える