为什么我的广播接收器不工作? [英] Why my BroadcastReceiver doesn't work?

查看:210
本文介绍了为什么我的广播接收器不工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想学习使用Android BroadcasReceiver。
我写这篇code,但它不工作...我trye​​d例如更改时间等...
这是什么问题?

我在清单中增加:

 <接收机器人:名字=com.example.broadcastreceiverspike.Broadcast>
        <意向过滤器的android:优先=100>
            <作用机器人:名字=android.intent.action.ACTION_SCREEN_ON/>
            <作用机器人:名字=android.intent.action.ACTION_SCREEN_OFF/>
            <作用机器人:名字=android.intent.action.TIME_SET/>
        &所述; /意图滤光器>
< /接收器>

我的简单BroadcasReceiver:

 公共类广播扩展了BroadcastReceiver {
        @覆盖
        公共无效的onReceive(上下文的背景下,意图意图){
           Log.d(广播,它的工作);
           Toast.makeText(背景下,广播,Toast.LENGTH_LONG).show();
        }
}

我的主要活动(默认的主活动)

 公共类MainActivity延伸活动{    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
    }    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气菜单;如果是present这增加了项目操作栏。
        。getMenuInflater()膨胀(R.menu.main,菜单);
        返回true;
    }}


解决方案

我解决了!

不像其他广泛的铸造意图,为Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON你不能宣布他们在你的Andr​​oid清单!我不知道确切原因,但他们必须在IntentFilter的在你的JAVA code注册

http://thinkandroid.word$p$pss.com/2010/01/24/handling-screen-off-and-screen-on-intents/

清单

 <接收机器人:名字=广播>
        &所述;意图滤光器>
            <作用机器人:名字=android.intent.action.TIME_SET/>        &所述; /意图滤光器>
    < /接收器>

主要活动类

公共类MainActivity延伸活动{

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);     //初始化接收器
    IntentFilter的过滤器=新的IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    广播接收器mReceiver =新的广播();
    registerReceiver(mReceiver,过滤器);}

}

我的广播接收机

公共类广播扩展了BroadcastReceiver {

 公共静态字符串变量=广播;@覆盖
公共无效的onReceive(上下文的背景下,意图意图){    如果(intent.getAction()。等于(Intent.ACTION_TIME_CHANGED))
    {
        Log.d(TAG,广播坎比奥迪orario);
        Toast.makeText(背景下,广播坎比奥迪orario,Toast.LENGTH_LONG).show();
    }
    否则如果(intent.getAction()。等于(Intent.ACTION_SCREEN_OFF)){
        //做任何你需要做的HERE
        Log.d(TAG,BROADCAST屏幕关闭);
        Toast.makeText(背景下,屏幕关闭,Toast.LENGTH_LONG).show();
    }否则如果(intent.getAction()。等于(Intent.ACTION_SCREEN_ON)){
        //做任何你需要做的HERE
        Log.d(TAG,BROADCAST屏幕上的);
        Toast.makeText(背景下,BROADCAST屏幕上的,Toast.LENGTH_LONG).show();
    }
}

}

I'm trying to learn to use Android BroadcasReceiver. I wrote this code but It doesn't work... I tryed for example to change the Time etc... What is it wrong?

I added in the Manifest:

<receiver android:name="com.example.broadcastreceiverspike.Broadcast" >
        <intent-filter android:priority="100">
            <action android:name="android.intent.action.ACTION_SCREEN_ON" />
            <action android:name="android.intent.action.ACTION_SCREEN_OFF" />
            <action android:name="android.intent.action.TIME_SET" />
        </intent-filter>
</receiver>

My simple BroadcasReceiver:

    public class Broadcast extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
           Log.d("BROADCAST", "It worked");
           Toast.makeText(context, "BROADCAST",  Toast.LENGTH_LONG).show();
        }
}

My Main Activity (default main Activity)

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

解决方案

I solved!

"unlike other broad casted intents, for Intent.ACTION_SCREEN_OFF and Intent.ACTION_SCREEN_ON you CANNOT declare them in your Android Manifest! I’m not sure exactly why, but they must be registered in an IntentFilter in your JAVA code"

http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/

Manifest

    <receiver android:name=".Broadcast" >
        <intent-filter>                
            <action android:name="android.intent.action.TIME_SET" />

        </intent-filter>
    </receiver>

Main Activity Class

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     // INITIALIZE RECEIVER
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new Broadcast();
    registerReceiver(mReceiver, filter);

}

}

My broadcast receiver

public class Broadcast extends BroadcastReceiver {

public static String TAG = "BROADCAST";

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals(Intent.ACTION_TIME_CHANGED))
    {
        Log.d(TAG, "BROADCAST Cambio di orario");
        Toast.makeText(context, "BROADCAST Cambio di orario", Toast.LENGTH_LONG).show();
    }
    else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        // DO WHATEVER YOU NEED TO DO HERE
        Log.d(TAG, "BROADCAST Screen OFF");
        Toast.makeText(context, "Screen OFF", Toast.LENGTH_LONG).show();
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        // AND DO WHATEVER YOU NEED TO DO HERE
        Log.d(TAG, "BROADCAST Screen ON");
        Toast.makeText(context, "BROADCAST Screen ON", Toast.LENGTH_LONG).show();
    }
}

}

这篇关于为什么我的广播接收器不工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆