2

どうすればコンパイルエラーを取り除くことができますか?

sendBroadcast(intent);

この方法は、私が作成した別のアプリではうまく機能しますが、現在のアプリではコンパイルエラーが発生します。赤い下線には、「タイプnewRunnableに対して未定義」というエラーメッセージがあります。

sendBroadcast()は、Intentクラスではなく、Contextクラスの一部です。

  public class Server {  // external class

  public class ServerThread implements Runnable {  // nested class

  public void run() {
        try {
            if (SERVERIP != null) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus = "Listening on IP: " + SERVERIP;
                    }
                });
                serverSocket = new ServerSocket(SERVERPORT);
                while (true) {
                    // listen for incoming clients
                    Socket client = serverSocket.accept();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            Intent intent = new Intent();
                            intent.setAction("com.example.AudioPlay");
                            intent.putExtra("serverStatus","Connected");
                                sendBroadcast(intent);
                        }
                    });

<<<<編集>>>>

質問の焦点をコンパイルエラーに変更しました。この方法は他のアプリでも問題なく機能します。私がコンパイルエラーについて困惑しているのは、この特定の状況です。

4

2 に答える 2

3

アクティビティ、サービス、またはその他のアプリケーションコンポーネントを拡張していないクラスのメソッドにアクセスsendBroadcastするには、クラスコンストラクタを使用してコンポーネントコンテキストをメソッドに渡す必要があります。

public class ServerThread implements Runnable {  // nested class

Context context;  //<< declare context here

public ServerThread(Context context){
  this.context=context;
}
  public void run() {

       handler.post(new Runnable() {
           @Override
             public void run() {
                  Intent intent = new Intent();
                  intent.setAction("com.example.AudioPlay");
                  intent.putExtra("serverStatus","Connected");
                   // use context for calling sendBroadcast
                  context.sendBroadcast(intent);
               }
    });

そして、Activityのようなコンテキストを次のように渡します。

ServerThread serverth=new ServerThread(Your_Current_Activity.this);
于 2013-02-04T07:06:30.173 に答える
0

質問について申し訳ありませんが、それは簡単すぎました。投稿して数秒後に自分の間違いに気づきました。

 Intent intent = new Intent();
 intent.setAction("com.exmaple.AudioPlay");
 intent.putExtra("serverStatus","Connected");
 mContext.sendBroadcast(intent);

他のクラスでは:

 Server serv = new Server(getApplicationContext());
于 2013-02-04T07:07:48.860 に答える