我刚刚开始使用BroadcastReceiver(这可能是我的问题)。我正在尝试从服务创建一个视图(是的,是的,我知道你不能)所以我发送请求到一个不可见的活动,以便在我需要时创建一个可见的视图。它没有按照我的意愿工作,所以我查看了BroadcastReceivers。到目前为止,一切都正常,我无法将我的getStringExtra值与任何东西进行比较。例)说我想将带有字符串“CREATE”的变量“param”传递给我的BroadcastReceiver。它到达我的接收器很好,用logcat我可以看到确实方法是“创建”。但是如果我想用if语句检查什么是param(param ==“CREATE”)它永远不会输入if。那么我在这里做错了什么?
public class Receiver extends BroadcastReceiver{
@Override
public void onReceive(Context c, Intent i) {
String stuff = i.getStringExtra("param");
log(stuff);
if (stuff=="CREATE"){
log("why dem feels");
}
if((String)i.getStringExtra("method")=="CREATE"){
log("i dont know what im doing");
}
log("FOR SOME REASON ITS SKIPPING THIS STEP");
}
//set of logs so that i dont have to keep specifying tags and shit
public void log(int in){
Log.d("TAG OF INTEGERS",Integer.toString(in));
}
public void log(String s){
Log.d("Receiver",s);
}
public void log(float f){
log((int) f);
}
}
这是我在我的服务中用来发送广播的代码
Intent i = new Intent();
i.setClassName("com.example.starteroverlay","com.example.starteroverlay.Receiver");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String methodCall = "CREATE";
i.putExtra("param",methodCall);
//
sendBroadcast(i);
并且因为我认为你们想要用代码看到我的清单的一部分
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<receiver android:name=".Receiver">
<intent-filter android:priority="0">
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</receiver>
答案 0 :(得分:2)
使用equals()
代替==
来比较字符串
所以将代码更改为
if (method.equals("CREATE"))
检查http://docs.oracle.com/javase/tutorial/java/data/comparestrings.html
的 PS。强> 的
将您的代码更改为
if (stuff.equals("CREATE")){
log("why dem feels");
}
if((String)i.getStringExtra("method").equals("CREATE")){
log("i dont know what im doing");
}
答案 1 :(得分:2)
使用equals
方法总是会检查字符串的内容但==
只检查对象引用
if (method.equals("CREATE"))
{
//do what you need
}
答案 2 :(得分:0)
// try this
@Override
public void onReceive(Context c, Intent i) {
String stuff = i.getStringExtra("param");
if (stuff.equals("CREATE")){
// write your code here
}
}