0

このブロードキャストレシーバーはどれもトリガーされませんが、別のアプリケーションでは、ネットワークの状態を確認していた場所で動作しています。この問題については、他に言うことはありません。

package monitor;

import android.content.BroadcastReceiver;

public class Monitor extends BroadcastReceiver {

      @Override
      public void onReceive(Context context, Intent intent) {
          System.out.println("jupi");
    }
}



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="monitor"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk
    android:minSdkVersion="9" 
    android:targetSdkVersion="15"/>

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<application 
    android:icon="@drawable/icon"
    android:label="@string/app_name">
    <service 
        android:name=".MonitorService">
    </service>
    <receiver 
        android:name=".Monitor">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

</application>

4

1 に答える 1

5

Android 3.1以降でこの動作が見られる場合は、おそらくこの変更の結果が見られます。

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

特にこれを読んでください:

システムはすべてのブロードキャストインテントにFLAG_EXCLUDE_STOPPED_PACKAGESを追加することに注意してください。これは、バックグラウンドサービスからのブロードキャストが、停止したアプリケーションのコンポーネントを不注意または不必要に起動するのを防ぐために行われます。

アプリケーションにはサービスとレシーバーのみが含まれているため、ユーザーがこのアプリケーションを開始することはありません。したがって、「停止」状態のままになると、ブロードキャストインテントが表示されなくなります。

アクティビティをアプリケーションに追加した場合、アクティビティを1回実行するだけで、アプリケーションを「停止」状態から削除し、受信者がブロードキャストインテントを受信できるようになりました。実際には、受信者を動的に登録する必要はありません。インストール後にユーザーにアプリケーションを1回「起動」させるだけで十分です。

于 2012-06-30T15:56:50.523 に答える