-1

나는 안드로이드 6.0을 사용하고 그것은 내 카메라 의도를 엽니 다Android에서 카메라와 영화 모드를 구분하는 방법은 무엇입니까?

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
try { 
    getApplication().startActivity(intent); 
} catch (final ActivityNotFoundException e) { 
    e.printStackTrace(); 
} 

에 의해 카메라 의도를 열고 있어요. 동영상 버튼을 누르면 동영상 GUI가 표시됩니다. 나는 카메라와 영화의 의도를 구별하고 싶다. 둘 다 카메라라는 이름을 가지고 있기 때문에 어떻게 프로그래밍으로 알 수 있습니까? 이것은 현재 프로세스 이름을 얻을 내 코드입니다

String foregroundProcess = null; 
    UsageStatsManager mUsageStatsManager = (UsageStatsManager) getApplicationContext().getSystemService(Service.USAGE_STATS_SERVICE); 
    long time = System.currentTimeMillis(); 

    UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 3600, time); 
    UsageEvents.Event event = new UsageEvents.Event(); 
    while (usageEvents.hasNextEvent()) { 
     usageEvents.getNextEvent(event); 
     if(event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) { 
      foregroundProcess = event.getPackageName(); 
     } 
    } 

    //Convert package name to application name 
    final PackageManager pm = getApplicationContext().getPackageManager(); 
    ApplicationInfo ai; 
    try { 
     ai = pm.getApplicationInfo(foregroundProcess, 0); 
    } catch (final PackageManager.NameNotFoundException e) { 
     ai = null; 
    } 
    String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)"); 
    return applicationName; 

답변

2

당신은 카메라가 ACTION_IMAGE_CAPTURE를 통해 사진을 찍을 것을 요청할 수 있으며, 카메라의 동영상 녹화 via ACTION_VIDEO_CAPTURE 요청할 수 있습니다.

테스트중인 카메라 앱이 Intent 동작에서 실행하면 사용자가 해당 모드로 전환 할 수 있도록 허용하는 경우 IMHO는 카메라 앱의 버그입니다. MediaStore.ACTION_IMAGE_CAPTURE 당신이 명확하게 (비디오 모드에만 충실해야 ACTION_VIDEO_CAPTURE 조치에 대한 동일) 이미지를 캡처하는 의도에서라고 때문에 비디오 모드로 전환 할 수 있도록해서는 안 처리

+0

감사합니다. 내 질문을 더 명확하게 업데이트합니다. 실제로, 나는 기록 단추를 눌러서 뿌리 전화에있는 2 개의 형태를 전환 할 수있다 : 카메라와 영화. 위의 함수를 사용하면 현재 응용 프로그램 이름을 얻을 수 있으며 두 모드 모두에서 카메라와 동일한 결과가 표시됩니다. – user8264

+0

@ user8264 : 사용자는 '의도'에 대해 동일한 앱을 선택하는 것을 환영합니다. 해당 앱이 사진을 찍거나, 동영상을 녹화하거나, 설정 화면에 표시하거나, 다른 작업을 수행하는지 여부 이러한 제어가 필요한 경우 이러한 'Intent'액션을 사용하지 말고 앱에 직접 카메라 기능을 구현하십시오. 게다가 'UsageStatsManager'는 실시간이 아닙니다 ("참고 : 응용 프로그램의 남용을 막기 위해 이벤트 로그의 마지막 몇 분은 잘립니다"). 따라서 기존 코드가 안정적으로 작동하지 않습니다. – CommonsWare

+0

그래서 우리는 이러한 모드를 구분할 방법이 없습니다. 내 목표는 카메라 캡처 및 카메라 기록과 같은 현재 프로세스 이름을 감지하는 것입니다. 가능한가? – user8264

1

응용. 이 문제는 다른 업체의 버그를 해결하기 위해 시간을 낭비하는 대신 앱 공급 업체에보고합니다.

+0

기본 카메라 앱의 녹화 버튼을 눌러 전환 할 수 있습니다. 카메라 앱을 녹화합니다. – user8264