2014-02-10 43 views
0

我發送以下意圖模擬硬件相機按鈕按下。此代碼正在服務中運行。我第一次運行此代碼(在隨機屏幕中),它會按預期打開默認相機應用程序。但是,如果我在相機應用程序中再次運行此代碼,它不會像我所期望的那樣拍攝照片。它只是重新加載相機應用程序。問題是:Android - 模擬相機按鈕按下打開相機應用程序,但不拍照

我還需要做些什麼才能使默認相機應用程序拍照?(無需用戶交互)。

 long eventtime = SystemClock.uptimeMillis(); 
     Intent downIntent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); 
     KeyEvent downEvent = new KeyEvent(eventtime, eventtime, 
     KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_CAMERA, 0); 
     downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); 
     sendOrderedBroadcast(downIntent, "android.permission.CAMERA"); 

     Intent upIntent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); 
     KeyEvent upEvent = new KeyEvent(eventtime+100, eventtime+100, 
     KeyEvent.ACTION_UP, KeyEvent.KEYCODE_CAMERA, 0); 
     upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); 
     sendOrderedBroadcast(upIntent, "android.permission.CAMERA"); 

(我不認爲權限是真的有必要)

回答

0

不,你不需要CAMERA權限打開相機應用。但是,並不能保證系統會在模擬相機上打開相機應用程序,這是用戶控制的偏好。

我們鼓勵您使用MediaStore.ACTION_IMAGE_CAPTURE,在developer.android.com如圖所示:

static final int REQUEST_IMAGE_CAPTURE = 1; 

private void dispatchTakePictureIntent() { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
    } 
} 

即使該代碼可以加載一些其他的應用程序,而不是股票的攝像頭,由於Android的open Intent model。任何應用程序,在它AndroidManifest.xml中以下兩行<intent-filter>一些活動:

<action android:name="android.media.action.IMAGE_CAPTURE"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
+0

這只是打開,如果TI exists..the用戶必須點擊一個按鈕來拍攝照片的相機應用。我所要做的就是在問題中已經提到,通過模擬相機按鈕事件拍攝沒有用戶干擾的照片。我知道這是可能的,因爲我可以用Tasker做到這一點,任務包含「打開相機應用程序」,「相機按鈕按下」。 – Anonymous

+0

首先,感謝您的提示。我將花費幾個小時與_Tasker_在一起。 –

+0

其次,如果您嘗試它,您會看到「拍照」操作不使用庫存相機應用程序。它啓動一項自定義活動,並讓您選擇正面或背面攝像頭,分辨率,延遲等。 –

相關問題