0

電話の起動時に実行されるサービスを作成しようとしていますが、SDカードからデータを読み取る必要があります。最初は受信機を使用してandroid.intent.action.BOOT_COMPLETEDいましたが、SDカードがロードされていることを確認するために以下のインテントに切り替えました。

MEDIA_MOUNTED私の問題は、私のNexus 7では、意図を受け取っていないように見えることです。Nexus 7にはSDカードがありません(ただし、個別のSDカードパーティションがあります)。私もBOOT_COMPLETED同じ運でその意図を試しました。エミュレーターとThunderboltで同じコードをテストしましたが、両方のインテントが機能します。

マニフェスト:

<receiver
    android:name=".StartupReceiver"
    android:enabled="true"
    android:exported="true"
    android:label="Start the NFS Automounter Service">

    <intent-filter>
        <action android:name="android.intent.action.MEDIA_MOUNTED"></action>
        <data android:scheme="file"/> 
        <!-- <action android:name="android.intent.action.BOOT_COMPLETED"></action>-->
    </intent-filter>
</receiver>

BroadcastReceiverクラス:

public class StartupReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        //if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) 
        //if ("android.intent.action.MEDIA_MOUNTED".equals(intent.getAction()))
        //{

            Log.d("NFS_Automounter", "Recieved Mount");
            Intent serviceIntent = new Intent("com.ancantus.nfsautomounter.AutomountService");
            context.startService(serviceIntent);
        //}
    }
}

クラスが実行されたかどうかをログに記録するためだけに、インテントマッチングをコメントアウトしました。

私の唯一の勘は、Nexus 7はMEDIA_MOUNTED実際のSDカードを持っていないため、をブロードキャストしないということです。BOOT_COMPLETEDしかし、私もその意図を受け取ることができません。

そして、質問を延期するために; はい、私にはBOOT_COMPLETED許可があります。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
4

2 に答える 2

5

人々がそれを見つけるのに十分な検索結果に表示される前に、この回答を何回入力する必要がありますか?太字のキャップが機能する可能性があります。

ANDROID 3.1以降、BroadcastReceiverアクティビティを実行しているユーザーなど、アプリケーションの他のコンポーネントの1つを手動で実行するまで、まったく機能しません

これは、ドキュメント(適切に配置されていませんが)、ブログ投稿、および次のような多くのStackOverflowの回答にあります。

そのため、アプリにアクティビティを追加します。とにかく、バックグラウンド操作を制御するための設定、ドキュメント、ライセンス契約、プライバシーポリシーなど、いくつかのアクティビティが必要です。

(注:私はあなたに本当に怒鳴っていません-私はこれが言葉を広めるための努力にもかかわらずこれが出続けることに不満を持っています...)

于 2012-09-03T23:39:21.883 に答える
1

多くのAndroidデバイスは、デスクトップがSDカードにアクセスしても、SDカードへのアクセスに影響を与えない方法でSDカードをエミュレートすることに注意してください。したがって、Nexus 7は単にすべてのメモリをそのように公開するため、実際には何もマウントされないため、ブロードキャストされない可能性がありますMEDIA_MOUNTED。起動時にいくつかのタスクを実行する場合は、聞くことBOOT_COMPLETEDが唯一の正しいアプローチです。

于 2012-09-03T23:29:45.027 に答える