2017-05-30 154 views
2

我希望用戶能夠在我的應用程序中快速打開默認相機應用程序(或其默認設置)。但是,我不想使用android.media.action.IMAGE_CAPTURE,因爲這隻會顯示應用程序的照片拍攝部分。我只想簡單地打開相機應用程序,而不使用它。我知道這是可能的,因爲我已經使用過的幾個圖庫應用程序(Most notibale:Focus)只能簡單地打開相機應用程序,而沒有使用IMAGE_CAPTURE。打開默認相機應用程序而不使用action.Image_Capture

+0

不確定,但您可能只是使用'android.media.action.IMAGE_CAPTURE'意圖獲取支持該意圖的所有應用程序的列表,然後僅使用其包的默認意圖過濾列表並啓動其中一個應用程序。 – Heinrich

+0

我嘗試過,但它只顯示實際的圖像捕捉意圖,而不是整個打開應用程序。無論打開什麼相機應用程序,它只會打開圖像捕捉部分。 – MJonesDev

+0

添加了更詳細的解釋作爲答案。 – Heinrich

回答

3

這可以通過使用PackageManager#resolveActivity(Intent)

在科特林來實現:

val info: ResolveInfo? = packageManager 
     .resolveActivity(cameraIntent); 
if (info == null) { 
    // No camera app installed. 
    return 
} 

// Documentation says at least one of the three infos is not-null: 
val app: ApplicationInfo = info.activityInfo?.applicationInfo 
     ?: info.serviceInfo?.applicationInfo 
     ?: info.providerInfo!!.applicationInfo 
val launch: Intent? = packageManager 
     .getLaunchIntentForPackage(app.packageName) 
if (launch == null) { 
    // Camera app has no default intent. 
    return 
} 
// Launch the camera intent's 
// resolved app's default activity. 
context.startActivity(launch) 

(其中cameraIntent是使用android.media.action.IMAGE_CAPTURE過濾器創建的意圖,context是當前應用程序上下文和packageManager是上下文的PackageManager實例)

+1

我會在可能的情況下嘗試此操作,但爲了執行此操作,我需要更新到Canary Android Studio。謝謝! – MJonesDev

+1

@MJonesDev您可以在Android Studio 2.3.2中安裝Kotlin插件或將此代碼轉換爲java,這應該不那麼困難。 –

+1

該代碼沒有使用任何Kotlin專用功能,因此請不要猶豫,以使用Java代替。 – Heinrich

1

如果你想要打開默認的相機應用程序,使用下面的代碼

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     startActivity(
       getPackageManager().getLaunchIntentForPackage(

intent.resolveActivity(getPackageManager()).getPackageName())); 
相關問題