diff --git a/src/com/android/soundrecorder/SoundRecorder.java b/src/com/android/soundrecorder/SoundRecorder.java
index 2067d6a..169c3d7 100644
--- a/src/com/android/soundrecorder/SoundRecorder.java
+++ b/src/com/android/soundrecorder/SoundRecorder.java
@@ -28,9 +28,11 @@
 import android.content.Context;
 import android.content.IntentFilter;
 import android.content.BroadcastReceiver;
+import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.Manifest;
 import android.media.AudioManager;
 import android.media.MediaRecorder;
 import android.net.Uri;
@@ -208,6 +210,11 @@
     static final int BITRATE_AMR =  5900; // bits/sec
     static final int BITRATE_3GPP = 5900;
     
+    private int mNumPermissionsToRequest = 0;
+    private boolean mShouldRequestSoundPermission = false;
+    private boolean mShouldRequestStoragePermission = false;
+    private static final int PERMISSION_REQUEST_CODE = 0;
+
     WakeLock mWakeLock;
     String mRequestedType = AUDIO_ANY;
     Recorder mRecorder;
@@ -245,6 +252,7 @@
     public void onCreate(Bundle icycle) {
         super.onCreate(icycle);
 
+        checkPermission();
         Intent i = getIntent();
         if (i != null) {
             String s = i.getType();
@@ -862,4 +870,50 @@
                 .show();
         }
     }
+
+    private void checkPermission() {
+        if (checkSelfPermission(Manifest.permission.RECORD_AUDIO)
+                != PackageManager.PERMISSION_GRANTED) {
+            mNumPermissionsToRequest++;
+            mShouldRequestSoundPermission = true;
+        }
+
+        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                != PackageManager.PERMISSION_GRANTED) {
+            mNumPermissionsToRequest++;
+            mShouldRequestStoragePermission  = true;
+        }
+
+        String[] permissionToRequest = new String[mNumPermissionsToRequest];
+        int permissionRequestIndex = 0;
+        if (mShouldRequestSoundPermission) {
+            permissionToRequest[permissionRequestIndex] = Manifest.permission.RECORD_AUDIO;
+            permissionRequestIndex++;
+        }
+        if (mShouldRequestStoragePermission) {
+            permissionToRequest[permissionRequestIndex] =
+                Manifest.permission.WRITE_EXTERNAL_STORAGE;
+            permissionRequestIndex++;
+        }
+        if (permissionToRequest.length > 0) {
+            requestPermissions(permissionToRequest, PERMISSION_REQUEST_CODE);
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode,
+            String permissions[], int[] grantResults) {
+        switch (requestCode) {
+            case PERMISSION_REQUEST_CODE:
+                if (grantResults.length > 0 &&
+                        grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    Log.d(TAG, "Grant permission successfully");
+                } else {
+                    Log.e(TAG, "Grant permission unsuccessfully");
+                }
+                break;
+            default:
+                break;
+        }
+    }
 }
