diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c9d3a57..510d95e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -12,6 +12,7 @@
     <permission android:name="com.android.gallery3d.permission.GALLERY_PROVIDER"
             android:protectionLevel="signatureOrSystem" />
 
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index 1547f6f..3879232 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -21,8 +21,11 @@
 import android.app.Activity;
 import android.content.AsyncQueryHandler;
 import android.content.ContentResolver;
+import android.content.BroadcastReceiver;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
+import android.content.Context;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
@@ -32,6 +35,8 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.OpenableColumns;
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -39,7 +44,6 @@
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.ShareActionProvider;
-
 import com.android.gallery3d.R;
 import com.android.gallery3d.common.ApiHelper;
 import com.android.gallery3d.common.Utils;
@@ -61,6 +65,8 @@
     private boolean mFinishOnCompletion;
     private Uri mUri;
     private boolean mTreatUpAsBack;
+    private AudioManager mAudioManager;
+    private TelephonyManager mTelephonyManager;
 
     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
     private void setSystemUiVisibility(View rootView) {
@@ -77,6 +83,9 @@
 
         requestWindowFeature(Window.FEATURE_ACTION_BAR);
         requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
+        mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
+        mTelephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
+        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
 
         setContentView(R.layout.movie_view);
         View rootView = findViewById(R.id.movie_view_root);
@@ -227,12 +236,17 @@
 
     @Override
     public void onPause() {
+        unregisterReceiver(mReceiver);
         mPlayer.onPause();
         super.onPause();
     }
 
     @Override
     public void onResume() {
+        IntentFilter filter = new IntentFilter();
+        filter.addAction("com.android.deskclock.ALARM_ALERT");
+        filter.addAction("com.android.deskclock.ALARM_DONE");
+        registerReceiver(mReceiver, filter);
         mPlayer.onResume();
         super.onResume();
     }
@@ -260,4 +274,51 @@
         return mPlayer.onKeyUp(keyCode, event)
                 || super.onKeyUp(keyCode, event);
     }
+
+    PhoneStateListener mPhoneListener = new PhoneStateListener() {
+        private boolean mControlPaused = false;
+
+        public void onCallStateChanged(int state, String incomingNumber) {
+            super.onCallStateChanged(state, incomingNumber);
+            switch (state) {
+                case TelephonyManager.CALL_STATE_RINGING:
+                    if (mPlayer != null && mPlayer.isPlaying()) {
+                        mControlPaused = true;
+                        mPlayer.onMoviePlayPause();
+                    }
+                    break;
+                case TelephonyManager.CALL_STATE_IDLE:
+                    if (mPlayer != null && mControlPaused) {
+                        mPlayer.onReplay();
+                        mControlPaused = false;
+                    }
+                    break;
+                default:
+                    break;
+            }
+        };
+    };
+
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        private boolean mControlPaused = false;
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (intent.getAction().equals("com.android.deskclock.ALARM_ALERT")) {
+                Log.d(TAG, "ALARM_ALERT");
+                if (mPlayer != null && mPlayer.isPlaying()) {
+                    mPlayer.onMoviePlayPause();
+                    mControlPaused = true;
+                }
+            } else if (intent.getAction().equals("com.android.deskclock.ALARM_DONE")) {
+                Log.d(TAG, "ALARM_DONE");
+                if (mPlayer != null && mControlPaused) {
+                    mPlayer.onReplay();
+                    mControlPaused = false;
+                }
+            }
+        }
+    };
+
 }
diff --git a/src/com/android/gallery3d/app/MoviePlayer.java b/src/com/android/gallery3d/app/MoviePlayer.java
index cc08050..ec228b3 100644
--- a/src/com/android/gallery3d/app/MoviePlayer.java
+++ b/src/com/android/gallery3d/app/MoviePlayer.java
@@ -116,6 +116,14 @@
         }
     };
 
+    public boolean isPlaying() {
+        if (mVideoView != null) {
+            return mVideoView.isPlaying();
+        } else {
+            return false;
+        }
+    }
+
     public MoviePlayer(View rootView, final MovieActivity movieActivity,
             Uri videoUri, Bundle savedInstance, boolean canReplay) {
         mContext = movieActivity.getApplicationContext();
@@ -380,6 +388,11 @@
             playVideo();
         }
     }
+    public void onMoviePlayPause() {
+        if (mVideoView.isPlaying()) {
+            pauseVideo();
+        }
+    }
 
     @Override
     public void onSeekStart() {
@@ -549,4 +562,5 @@
         }
         return null;
     }
+
 }
