静态接收器未运行

时间:2013-11-20 20:04:31

标签: android-broadcast android

我创建了一个由一个静态接收器组成的应用程序:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.docd.connectivityresetter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="19" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <receiver android:name=".ConnectivityReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

    </application>

</manifest>

接收者

package com.docd.connectivityresetter;

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

public final class ConnectivityReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        android.util.Log.i("received", intent.getAction());
        android.util.Log.i("received", intent.getExtras().toString());
    }

}

安装了应用程序。

1)当我触发飞行模式(小区网络关闭)时没有收到(没有日志)

2)我的应用程序未列在手机应用程序设置菜单的“正在运行”选项卡中(当注册静态接收器时,不应将其列为“正在运行”)?

我在搜索时遇到过这种情况。一切都匹配,除了它对我不起作用。 Intent action for network events in android sdk

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我通过添加:

解决了这个问题
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<receiver android:name=".ConnectivityReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.SERVICE_STATE" />
    </intent-filter>
</receiver>

如果它不起作用,另一种方法是在你的应用程序中添加一个PhoneStateListener:

首先,在清单中添加服务类:

<service android:name=".YourService" />

然后,使用phonestatelistener

的开头创建您的服务
@Override
public void onCreate(){
    TelephonyManager tm = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
    listener = new PhoneStateListener() {
        @Override
        public void onServiceStateChanged(ServiceState serviceState){
            // Your code regarding ServiceState
        }
    };
    tm.listen(listener,PhoneStateListener.LISTEN_SERVICE_STATE);

    super.onCreate();
}

然后,在第一个活动中启动服务

startService(new Intent(YourActivity.this, YourService.class));

最终的解决方案,也许不是最好的解决方案,但如果你仍然想要依赖接收器就是在启动事件ACTION_BOOT_COMPLETED上启动PhoneStateListener(不要忘记RECEIVE_BOOT_COMPLETED权限情况下)

答案 1 :(得分:0)

最后,当我无法收到BOOT_COMPLETED时,我找到了这个很好的答案。

BroadcastReceiver not receiving BOOT_COMPLETED

我原本不知道......