3

アクティビティ Main.java がアプリケーションで開いています。ブロードキャスト レシーバーを使用してアクティビティを閉じたいのですが、アクティビティを閉じる方法を教えてください。

4

3 に答える 3

6

まず、Main.java をレシーバーとして登録する必要があります。Main.java の onResume() に登録できます。

@Override
public void onResume() {
    registerReceiver(broadcastReceiver, new IntentFilter(BroadcasterClassName.NAME_OF_ACTION));
}

次に、ブロードキャストを処理して、アクティビティを終了します。

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(BroadcasterClassName.NAME_OF_ACTION)) {
            finish();
        }
    }
}
于 2012-12-20T11:49:00.880 に答える
0

Handler.Callback を実装するアクティビティにメッセージを送信し、そこで処理してアクティビティを閉じることができます。

簡単な例:

class Act1 extends Activity implements Handler.Callback {
 public static final int CLOSE_ACTIVITY = 54212;
 public boolean handleMessage(Message msg) {
   if(msg.what == CLOSE_ACTIVITY) {
    finish();
   }
 }
}

そして、ほとんどの場合、BroadcastReceiver はメイン スレッドで実行されるためです。Handler 経由でメッセージを送信するだけです。

new Handler().sendMessage(MessageFactory.createShutdownMsg()). 
于 2012-12-20T11:49:05.927 に答える
-1

あなたはこれを行うことができます:あなたのメインには:

private static Main mInstance;

onCreate()
{
   ...
   mInstance = this;
}

public static boolean closeActivity()
{
   if (mInstance != null)
   {
      mInstance.finish();
      return true;
   }
   return false;
}

ただし、これは一度に 1 つの Main しか存在しないことを意味します。マニフェストに android:noHistory="true" などを追加することで、それを実現できると思います。

于 2012-12-20T11:41:31.973 に答える