Come suggerito da Dr_sulli, sto solo convertendo il codice in un codice e funziona bene per me, in tal caso, se l'accesso all'applicazione della telecamera diretta è possibile, è possibile consentire all'utente di scegliere altre applicazioni della fotocamera insieme alla videocamera di sistema.
protected static final int CAMERA_ACTIVITY = 100;
Intent mIntent = null;
if(isPackageExists("com.google.android.camera")){
mIntent= new Intent();
mIntent.setPackage("com.google.android.camera");
mIntent.setAction(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mIntent.putExtra("output", Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "/myImage" + ".jpg")));
}else{
mIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mIntent.putExtra("output", Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "/myImage" + ".jpg")));
Log.i("in onMenuItemSelected",
"Result code = "
+ Environment.getExternalStorageDirectory());
}
startActivityForResult(mIntent, CAMERA_ACTIVITY);
all'interno onActivityResult fare le tue cose
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.i("in onActivityResult", "Result code = " + resultCode);
if (resultCode == -1) {
switch (requestCode) {
case CAMERA_ACTIVITY:
//do your stuff here, i am just calling the path of stored image
String filePath = Environment.getExternalStorageDirectory()
+ "/myImage" + ".jpg";
}
}
}
isPackageExists confermeranno il pacchetto esistano o meno.
public boolean isPackageExists(String targetPackage){
List<ApplicationInfo> packages;
PackageManager pm;
pm = getPackageManager();
packages = pm.getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if(packageInfo.packageName.equals(targetPackage)) return true;
}
return false;
}
O si può fare a modo mio la sua molto più facile, questo sarà filtrare l'applicazione per tutti i sistemi e poi si confronta il nome di conseguenza funziona su tutti i telefoni, ma la tecnica di cui sopra a causa di codifica difficile non funzionerà su ogni telefono. Successivamente è possibile utilizzare questo nome del pacchetto per avviare l'attività della telecamera come descritto sopra.
PackageManager pm = this.getPackageManager();
List<ApplicationInfo> list = getPackageManager().getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
for (int n=0;n<list.size();n++) {
if((list.get(n).flags & ApplicationInfo.FLAG_SYSTEM)==1)
{
Log.d("Installed Applications", list.get(n).loadLabel(pm).toString());
Log.d("package name", list.get(n).packageName);
if(list.get(n).loadLabel(pm).toString().equalsIgnoreCase("Camera"))
break;
}
}
Per aggiungere un po 'qui, non si cambia l'intento è già in qualche modo, ad eccezione di chiamare setComponent –
Grazie Justin. Immagino di poter controllare il nome del componente della videocamera di sistema predefinita (com.google.android.camera) e, se è presente, utilizzare l'approccio setComponent altrimenti ricorrere al solito approccio. –