PlAY_FINISHED
アクションを受信するようにAndroidManifest.xmlでレシーバーを定義しました。他のファイルでは、次のようにそのブロードキャストレシーバーにインテントを送信します。
public String PlAY_FINISHED = "play finished";
...
Intent in = new Intent(PlAY_FINISHED);
this.service.sendBroadcast(in);
したがって、マニフェストファイルでは、次のように設定します。ここで、MyStaticStringは、アプリケーション内のすべての静的文字列を含むクラスです。これは正しい方法ですか?
<intent-filter>
<action Android:name="com.mysite.appname.MyStaticString.PLAY_FINISHED" />
</intent-filter>
マニフェストのインテントフィルタのAndroid:name
は単なる任意の文字列であり、Java定数へのパス」ではありません。問題は、コードの文字列定数が次のように定義されていることです。 "play finished"
、これはマニフェストで指定した名前"com.mysite.appname.MyStaticString.PLAY_FINISHED"
と一致しません。
そのはず
public String PlAY_FINISHED = "com.mysite.appname.MyStaticString.PLAY_FINISHED";
変数が何と呼ばれるかは関係ありません。また、文字列を変数に格納する場合でも関係ありません。または、その名前にタイプミスが含まれていること:)
代わりに、マニフェストのAndroid:name
を"play finished"
に変更することもできますが、カスタムブロードキャストアクションはシステム全体であるため、他のアプリとの衝突を避けるために、アプリのパッケージ名で修飾する必要があります。
Androidマニフェストファイルに登録
<receiver Android:name=".ReceiverDemo">
<intent-filter>
<action Android:name="marakana.intent.action.ReceiverDemo" />
</intent-filter>
</receiver>
プログラムで登録します。
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// Create the receiver
receiver = new TimelineReceiver();
filter = new IntentFilter( UpdaterService.NEW_STATUS_INTENT );
}
protected void onResume() {
super.onResume();
super.registerReceiver(receiver, filter,
"com.marakana.yamba.SEND_TIMELINE_NOTIFICATIONS", null);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
...
更新:複数の値複数の値を指定できる場合、要素は、単一の要素内に複数の値をリストするのではなく、ほとんどの場合繰り返されます。たとえば、インテントフィルターは複数のアクションをリストできます:
<intent-filter . . . >
<action Android:name="Android.intent.action.EDIT" />
<action Android:name="Android.intent.action.INSERT" />
<action Android:name="Android.intent.action.DELETE" />
. . .
</intent-filter>
UPDATE2:これはAndroidManifest.xmlの例です
<manifest
package="com.marakana.Android.lifecycle"
Android:versionCode="1"
Android:versionName="1.0" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<uses-sdk
Android:minSdkVersion="10"
Android:targetSdkVersion="11" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<application
Android:name=".ApplicationDemo"
Android:icon="@drawable/icon"
Android:label="@string/app_name">
<activity
Android:name=".ActivityDemo"
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=".AnotherActivity"></activity>
<activity Android:name=".SystemServicesDemo"></activity>
<service Android:name=".ServiceDemo"></service>
<service Android:name=".IntentServiceDemo">
<intent-filter>
<action Android:name="marakana.intent.action.IntentServiceDemo" />
</intent-filter>
</service>
<receiver Android:name=".ReceiverDemo">
<intent-filter>
<action Android:name="marakana.intent.action.ReceiverDemo" />
</intent-filter>
</receiver>
<provider
Android:name=".ProviderDemo"
Android:authorities="com.marakana.Android.lifecycle.providerdemo" />
</application>
</manifest>