开发者

Finishing an Activity from a Broadcast Receiver

I have an Activity that I display as modeless when the phone rings (over the phone app). I would like to finish the Activity when either of the following events occur. The first is if I touch anywhere outsid开发者_运维技巧e the Activity (this is not a problem), the second is if the ringing stops. I am listening for IDLE_STATE in the broadcast receiver but I am not sure on how to call the finish on the activity when I see it. The receiver is not registered by the activity but by the Manifest.xml


write the code in your receiving broadcast now this will send another broad cast with the intent named "com.hello.action"

Intent local = new Intent();
local.setAction("com.hello.action");
sendBroadcast(local);

Now catch this intent in the activity with you want to finish it and then call the super.finish() on the onReceive method of your receiver like this

public class fileNamefilter extends Activity {
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    IntentFilter filter = new IntentFilter();

    filter.addAction("com.hello.action");
    registerReceiver(receiver, filter);

    }
BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        finish();

    }
};

public void finish() {
    super.finish();
};
}

this will finish the activity


What if you register another broadcast receiver from the activity. Then, when you want to kill it, send a broadcast message from the broadcast receiver that you mentioned.


I actually ended up adding a PhoneStateListener in the Activity to listen for IDLE_STATE.


After a long R&D over internet i have solved my problem. The below code is helpful if you start an activity from broadcast receiver and clear all activity stack instance.

 @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            moveTaskToBack(true);
        }
    }


I used this code to solve my problem. finish is the method of Activity, so call Activity and context like:

if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
     Log.e(TAG, "Inside EXTRA_STATE_IDLE");
     ((Activity) arg0).finish();
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜