public class takeimage extends Fragment {
private Uri mImageCaptureUri;
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_FILE = 2;
private String mPath;
private ImageView mImageView;
Bitmap bitmap = null;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.activity_send_image, container, false);
final String[] items = new String[] { "From Camera", "From SD Card" };
mImageView = (ImageView)view.findViewById(R.id.iv_pic);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_item, items);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Select Image");
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (item == 0) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "tmp_avatar_"
+ String.valueOf(System.currentTimeMillis())
+ ".jpg");
mImageCaptureUri = Uri.fromFile(file);
try {
intent.putExtra(
android.provider.MediaStore.EXTRA_OUTPUT,
mImageCaptureUri);
intent.putExtra("return-data", true);
getActivity().startActivityForResult(intent,
PICK_FROM_CAMERA);
} catch (Exception e) {
e.printStackTrace();
}
dialog.cancel();
} else {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
getActivity().startActivityForResult(
Intent.createChooser(intent,
"Complete action using"), PICK_FROM_FILE);
}
}
});
final AlertDialog dialog = builder.create();
Button show = (Button) view.findViewById(R.id.btn_choose);
show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Switch the tab content to display the list view.
dialog.show();
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK)
return;
if (requestCode == PICK_FROM_FILE) {
mImageCaptureUri = data.getData();
// mPath = getRealPathFromURI(mImageCaptureUri); //from Gallery
if (mPath == null)
mPath = mImageCaptureUri.getPath(); // from File Manager
if (mPath != null)
bitmap = BitmapFactory.decodeFile(mPath);
} else {
mPath = mImageCaptureUri.getPath();
bitmap = BitmapFactory.decodeFile(mPath);
}
mImageView.setImageBitmap(bitmap);
}
public String getRealPathFromURI(Uri contentUri) {
String [] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(contentUri, proj, null, null,null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
Я нашел некоторые преимущества для make-файлов с крупными проектами, главным образом связанными с объединением местоположения настроек проекта. Несколько легче управлять списком исходных файлов, включать пути, препроцессор определяет и так далее, если они - все в make-файле или другом файле конфигурации сборки. С несколькими конфигурациями, добавляя включать путь означает, что необходимо удостовериться, что Вы обновляете каждую конфигурацию вручную через трудные свойства проекта Visual Studio, которые могут стать довольно утомительными, поскольку проект увеличивается в размере.
Проектами, которые используют много сделанных на заказ инструментов, может быть легче управлять также, такой, как будто необходимо скомпилировать пиксель / вершинные шейдеры или код на других языках без собственной поддержки VS.
У Вас должны будут все еще быть всевозможные конфигурации проекта однако, так как необходимо будет дифференцировать вызов инструмента сборки для каждой конфигурации (например, передающий в различных параметрах командной строки для создания).
Непосредственные оборотные стороны, которые приходят на ум:
Короче говоря, Вы проведете меньше времени, управляя Вашими конфигурациями проекта, но больше времени, подключая Visual Studio коаксиальным кабелем для работы правильно с ним.
Visual Studio создается сверху файлов конфигураций MSBuild. Можно рассмотреть *proj и *sln файлы как make-файлы. Они позволяют Вам полностью настраивать процесс сборки.
В то время как это технически возможно, это не очень дружественное решение в рамках Visual Studio. Это будет бороться с Вами все время.
Я рекомендую смотреть на NAnt. Это - очень устойчивая система сборки, где можно сделать в основном что-либо, что Вы должны.
Наш сценарий NAnt делает это на каждой сборке:
Кроме того, наш сервер сборки усиливает это и добавляет еще 1 задачу, которая генерирует документацию Замка из песка.
Если Вам не нравится XML, Вы могли бы также смотреть на Грабли (рубин), Bake/BooBuildSystem (Шиканье) или Psake (PowerShell)
Можно использовать nant, чтобы разработать проекты индивидуально таким образом замена решения и иметь 1 решение для кодирования и никакие решения для сборки.
1 вещь иметь в виду, то, что решением и csproj файлами от по сравнению с 2005 и являются msbuild сценарии. Таким образом, если Вы знакомитесь с msbuild, Вы смогли владеть существующими файлами, делать по сравнению с более легким, и делать Ваше развертывание легче.
У нас есть подобный набор как тот, который Вы описываете. Мы поддерживаем по крайней мере 3 различных платформы, таким образом, мы нашли что с помощью CMake для чесотки различные решения для Visual Studio. Настроенный может быть немного болезненным, но это в значительной степени сводится к чтению документов и нескольких учебных руководств. Необходимо смочь сделать фактически все, что можно сделать путем движения в свойства проектов и решения. Не уверенный, если у Вас могут быть все три сборки платформ, сосуществующие в том же решении, но можно использовать CruiseControl для заботы о сборках и выполнении сценариев тестирования как часто по мере необходимости.