-1

私は、Android 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アクションから起動する場合それはカメラアプリのバグです私見あなたがテストされているカメラアプリは、ユーザーがこれらのモードを切り替えることができます場合。

+0

ありがとうございました。私はより明確に私の質問を更新します。実際には、録音ボタンを押して、ルート付き電話でカメラと映画の2つのモードを切り替えることができます。上記の関数を使って、私は現在のアプリケーション名を得ることができ、両方のモードでカメラと同じ結果が表示されます – user8264

+0

@ user8264:ユーザーは 'Intent'のために同じアプリを選ぶことができます。そのアプリが写真を撮っているか、動画を録画しているか、設定画面にあるか、その他何かをしているかどうか。その程度の制御が必要な場合は、これらの 'Intent'アクションを使用せず、アプリケーションに直接カメラ機能を実装してください。さらに、「UsageStatsManager」はリアルタイムではありません(「注:イベントログの最後の数分はアプリケーションによって乱用されないように切り捨てられます」)ので、既存のコードは確実に動作しません。 – CommonsWare

+0

したがって、これらのモードを区別する方法はありません。私の目標は、カメラキャプチャやカメラ記録などの現在のプロセス名を検出することです。出来ますか? – user8264

1

MediaStore.ACTION_IMAGE_CAPTUREを処理するアプリでは、画像をキャプチャするために明示的に呼び出すため、ビデオモードに切り替えることはできません(ビデオモードのみに対応するACTION_VIDEO_CAPTUREアクションの場合と同じです)。私は、この問題を他のバグを回避しようと時間を浪費するのではなく、アプリのベンダーに報告したいと思います。

+0

デフォルトカメラアプリの録画ボタンを押すことで切り替えることができます。それはカメラアプリを記録するために行くでしょう。 – user8264

関連する問題