2012-03-13 5 views
3

が機能していません。私は自分のアプリを起動するときに私の放送受信機を起動する必要があるので、私はこれらのアクションを使用しています。しかし、アプリを起動したり再起動したりすると、受信機は動作していません。携帯電話を再起動したときにのみ機能します。私の情報源に何か間違っていますか?BroadcastReceiverは、私は、このブロードキャストレシーバを実装している

+1

一般的には、文字列定数を使用するのは良いことです。インテントアクション文字列の場合は、あなた自身で行う必要はありません。これらの文字列はすべて、アンドロイドフレームワーク内で独自の定数を持ち、ほとんどがIntentクラスに属します。例えば。 ['Intent.ACTION_BOOT_COMPLETED'](http://developer.android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED)を参照してください。むしろこれらを使用し、自分で定義するときに時折の誤植による混乱を避けます。 ;) –

答えて

3

論理的には、起動/再起動後にアプリを初めて実行すると、PACKAGE_FIRST_LAUNCHがブロードキャストされるようです。そして、あなたのアプリケーションアクティビティスタックが削除され、あなたのアプリケーションが(再起動のように)再開するためにクリックされた場合には、PACKAGE_RESTARTEDがブロードキャストされるべきです。

しかし、アプリを起動したとき(おそらく最初のアクティビティから)カスタムアクション文字列をブロードキャストすることで、これを簡単に達成できます。

5

FYI:PACKAGE_FIRST_LAUNCHです。は、アプリケーションをインストールするために使用したもの、つまりAndroidマーケットとなるほとんどのエンドユーザー向けにインストーラパッケージに送信されます。

編集:
ああ、および「PACKAGE_RESTARTED」のために、独自の<intent-filter>にその1を抜け出すと、1つは、URIと明示的なスキームが付属していますので、

<data android:scheme="package"/> 

を追加します。

0

マニフェスト:

... 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></> 
... 
<receiver android:name=".AutoStart"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
    </intent-filter> 
</receiver> 
... 

受信機:あなたはそれが動作しません低いAPIレベルを使用している場合

package YourPackage; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class AutoStart extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) 
     { 
      // Your code 
     } 
    } 
} 
0

意図android.intent.action.PACKAGE_FIRST_LAUNCHは、AndroidのAPIレベル12で導入されます。それに応じてプロジェクト設定を変更してください。

関連する問題