2 pipi0 PIPI0 于 2016.01.22 09:27 提问

请问广播接受者不能发送广播吗?还是我写的代码有问题啊?

public class netReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Intent wifi = new Intent();
    if(isWifi(context)){
        wifi = new Intent(context, MyService.class);
        context.startService(intent);
    }else{
        wifi.setAction("net.s5c.Changelink.wifiOff");
        sendBroadcast(wifi);
    }

    Toast.makeText(context, "监听到WIFI动作", Toast.LENGTH_LONG).show();
}

public static boolean isWifi(Context mContext) {  
    ConnectivityManager connectivityManager = (ConnectivityManager) mContext  
            .getSystemService(Context.CONNECTIVITY_SERVICE);  
    NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();  
    if (activeNetInfo != null  
            && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {  
        return true;  
    }  
    return false;  
}  

}

3个回答

PIPI0
PIPI0   2016.01.22 13:09
已采纳
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class netReceiver extends BroadcastReceiver {
    Intent wifi = new Intent();

    @SuppressWarnings("static-access")
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetInfo = manager.getActiveNetworkInfo();
        if (activeNetInfo != null  
                && activeNetInfo.getType() == manager.TYPE_WIFI) {  
            wifi = new Intent(context, MyService.class);
            wifi.setAction(MainActivity.ACCESSIBILITY_SERVICE);
            context.startService(wifi);
        }else{
            wifi.setAction("net.s5c.Changelink.wifiOff");
            context.sendBroadcast(wifi);
        }

    }
}

我又重写了一下,发现广播接收者多次接到广播还是不能启动起来服务,我知道我写的有问题,但那里有问题应该怎么写啊??

PIPI0
PIPI0 这里能接收到net.s5c.Changelink.wifiOff这个广播,但就是不启动服务,我判断这里肯定做的不对,启动服务这里也有问题,应该怎么改呢?
2 年多之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.22 09:28

可以发送的,这个没关系,你写的有问题

qq_15771061
qq_15771061   2016.01.22 14:21

启动服务的执行者是context,你的context是发送广播的context,也就是Activity,而不是该广播

PIPI0
PIPI0 我是在用广播接收者在启动服务啊~~~你的回答对我一点帮助都没有啊~~
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
广播发送者&广播接收者介绍
1.广播接收者   广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据; 广播意图就是通过Context.sendBroadcast(Intent intent)或Context.sendOr
注册广播接收者的两种方式
注册广播的方式分两种:静态注册、动态注册 静态注册:(分两步) 1、创建一个类,并继承自BroadcastReceiver,继承之后实现onReceiver public class MyBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context c
BroadcastReceiver广播接收者的两种注册方式
广播是android四大组件之一,在我们的应用开发中也占据着重要的地位,我们在很多时候和很多场景中都需要使用到广播,那么接下来我们就说一下广播接收者的两种注册方式: 第一种:在androidmanifest.xml中注册。 在配置文件中注册的接收者的特点是即使应用程序已被关闭,该接收者依然可接受它感兴趣的广播,比如手机电池电量的广播接收者,没有必要将某个程序开启。 代码如下:
Android-广播BroadcastReceiver-自定义广播接受者和发送者
转载请说明出处  最近在做公司新产品的设计,想到抽屉效果设计加入到项目应该挺不错的,一方面可以讲经常使用的功能模块直接显示给用户,另一方面将用户不常用的功能模块隐藏起来,而这些功能模块的显示和隐藏可以通过一个抽屉组建实现。所以我们想将这个设计理念加入到我们的产品中。
为什么不能在BroadcastReceiver中开启子线程
如果开发者需要在Service处理耗时任务,建议在Service中另外启动一条新线程来处理该耗时任务.就像前面BindService中看到的, 程序在BindService中的onCreate()方法中启动了一条新线程来处理耗时任务.可能有读者感到疑惑:直接在其他程序组件中启动子线 程来处理耗时任务不行吗?这种方式也不可靠,由于activity可能会被用户退出,Broadcast Receiver
Fragment使用LocalBroadcastManager接收广播消息
这种方式不用在配置文件加东西 广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里。 LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity()); IntentFilter intentFilter
Broadcast与service----------通过广播启动服务
BroadcastReceiverd的流程:注册、发送广播。       Service的流程:注册、启动、停止。       上一篇已经讲了,注册广播有两种方式,静态的和动态的。今天我用动态的方式注册一个广播,通过广播来启动服务。 大致过程为:定义三个按钮:发送、取消、退出。点击发送按钮时,注册广播、在广播的onReceive()方法中启动服务。 点击取消,停止服务。点击退出,停止服务退
Android发送广播Broadcast
BroadcastReceiver本质上时一种全局的监听器,用于监听系统全局的广播消息,实现系统中不同组件之间的通信。     调用sendBroadcast()即可发送广播,这条广播会启动intent参数所对应的BroadcastReceiver。使用BroadcastReceiver来接受广播。     下面是一个简单的实例     工程结构:          An
在service代码里实现广播接收者
service里: // 初始化广播接收器 private MyBroadcastReceiver receviver = null; private void initBroadcastReceiver() { // 创建一个IntentFilter对象,将其action指定为BluetoothDevice.ACTION_FOUND IntentFilter intentFilt
Android学习——服务Service与广播接收者BroadcastReciver
Service 1.1 服务的生命周期 第一种:创建 - - > 开始 - - > 销毁 新建MyService类: /** * Created by humour on 2015/9/24 0024. * 服务的生命周期有两种; 1.创建 开始 销毁 2.创建,绑定 解除绑定 销毁 */ public class MyService extends Service { @N