-1

BroadcastReceiver を使い始めたばかりです (これは私の問題かもしれません)。私はサービスからビューを作成しようとしています (はい、はい、あなたができないことを知っています) ので、必要なときに目に見えるビューを作成するために、目に見えないアクティビティにリクエストを送信していました。思ったように機能していなかったので、BroadcastReceivers を調べました。これまでのところ、 getStringExtra の値を何かと比較できないという例外を除いて、すべてが機能しています。例)文字列「CREATE」の値を持つ変数「param」をBroadcastReceiverに渡したいとします。それは私の受信機に問題なく届き、logcatを使用すると、実際にメソッドが「CREATE」であることがわかります。しかし、if ステートメント if (param=="CREATE") でどの param かを確認したい場合、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>
4

3 に答える 3

3

メソッドを常に使用equalsすると、文字列の内容がチェックされますが、==オブジェクト参照のみがチェックされます

if (method.equals("CREATE"))
{
      //do what you need
}
于 2013-10-03T05:27:39.110 に答える
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");
 }
于 2013-10-03T05:24:08.103 に答える
0
// try this
@Override
    public void onReceive(Context c, Intent i) {
        String stuff = i.getStringExtra("param");
        if (stuff.equals("CREATE")){
           // write your code here
        }
    }
于 2013-10-03T05:33:20.890 に答える