2012-06-30 112 views
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> 

+0

不知道,但给这个在您的清单<使用许可权的android:NAME =“android.permission.ACCESS_NETWORK_STATE” /> – rajpara

+0

有任何的logcat错误或消息? – rajpara

+0

在1.评论:它已经表明了这一权限。在2注释:在日志猫从该应用程序 –

回答

5

如果您看到此行为在Android 3.1或更高版本,你可能看到这种变化的结果:

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

尤其是这样说的:

注意,系统将FLAG_EXCLUDE_STOPPED_PACKAGES所有 广播意图。它这样做是防止广播与背景 服务从无意或不必要地启动的 stoppped应用程序的组件。

由于您的应用程序只包含一个服务,接收器,用户将不会开始这个应用程序,因此,如果将保持在“停止”状态,防止它看到任何广播意图。

当您添加活动到您的应用程序,运行它一次足以从“停止”状态删除的应用程序,使您的接收器然后有资格接收广播意图。您实际上不需要动态注册接收器。只需让用户在安装后“启动”应用程序就足够了。