为什么我的广播接收器不工作? [英] Why my BroadcastReceiver doesn't work?
问题描述
我想学习使用Android BroadcasReceiver。
我写这篇code,但它不工作...我tryed例如更改时间等...
这是什么问题?
我在清单中增加:
<接收机器人:名字=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你不能宣布他们在你的Android清单!我不知道确切原因,但他们必须在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屋!