[Android] 여러개 Intent를 묶어서 보내기.

Posted by Find my true self Fimtrus
2014.05.29 13:35 Programming/Android

앱을 만들 때, 제조사 또는 버전의 차이로 인해 인텐트 호출후 원하는 리스트가 표시되지 않을 때가 있다.

특히 카메라와 갤러리의 경우가 그렇다.

대부분의 개발자들은 호출 한번으로 카메라와 갤러리를 모두 보여주고 싶은데,

검색능력부족(?)으로 인해, 결국 따로 만드는 경우가 태반이다.

카메라와 갤러리를 동시에 호출할 수 있는 소스를 첨부한다.




먼저 인텐트들을 담을 리스트와와 카메라호출을 위한 인텐트, 그리고 패키지 검색을 위한 패키지 매니저, 마지막으로 카메라 패키지 정보를 담을 변수를 선언한다.


final List<intent> cameraIntents = new ArrayList<intent>();
final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = getPackageManager();
final List<resolveinfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);


그리고 검색된 카메라 패키지 정보를 통해 인텐트 리스트를 만든다.


for(ResolveInfo res : listCam) {
    final String packageName = res.activityInfo.packageName;
    final Intent i = new Intent(captureIntent);
    i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    i.setPackage(packageName);
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFile));
    cameraIntents.add(i);

}


마지막으로 갤러리리를 불러오는 인텐트에 카메라 인텐트정보가 담겨 있는 리스트를 담아주면 끝!


Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
i.addCategory(Intent.CATEGORY_OPENABLE);  
i.setType("image/*"); 
Intent chooserIntent = Intent.createChooser(i,"File Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
MainActivity.this.startActivityForResult(chooserIntent,  FILECHOOSER_RESULTCODE); 


이렇게 하면 리스트다이얼로그를 통해 카메라와 갤러리가 함께있는 것을 볼 수 있다.


출처 : 기억안남...

이 댓글을 비밀 댓글로
  1. 테스트해 보기도 전에, 눈이 번쩍 띕니다.
    잘 쓰겠습니다.
    감사합니다.

[Android] Android에서 "Unknown error merging manifest"

Posted by Find my true self Fimtrus
2014.02.20 17:07 Programming/Android

Android ADT 19(맞나??ㅎㅎ) 이상부터 Manifest.xml Merge 기능이 추가되었다.

메인이 되는 프로젝트의 project.properties 파일에 manifestmerger.enabled=true 를 추가해주면 된다.

하지만!!!

Manifest의 내용이 중복될 경우, 중복되었다는 메시지를 보여주지만, 가끔 말도안되는 에러를 보여줄 때가 있다.

그중 하나가...

 "Unknown error merging manifest"

라는 메시지 인데..... 정말 엄청난 삽질을하다가.. 어느 블로거에 의해서 

문제를 해결하게 되었다.

메인 프로젝트의 android : targetSdkVersion이 

라이브러리 프로젝트의 targetSdkVersion 보다 낮으면 오류가 표시되므로 

라이브러리의 targetSdkVersion을 낮추던가, 메인의 버전을 높여주면된다.


출처 : u1aryzの備忘録とか
이 댓글을 비밀 댓글로

[Android] XML drawable 을 코드로 만들기(xml selector를 java code로 변환)

Posted by Find my true self Fimtrus
2014.02.20 11:25 Programming/Android
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
    getResources().getDrawable(R.drawable.pressed));
states.addState(new int[] {android.R.attr.state_focused},
    getResources().getDrawable(R.drawable.focused));
states.addState(new int[] { },
    getResources().getDrawable(R.drawable.normal));

imageView.setImageDrawable(states);  //YOUR IMAGE HERE
//AND FOR BUTTON
 button.setBackgroundDrawable(states);//FOR BUTTON
이 댓글을 비밀 댓글로
    • 2018.04.16 15:05
    비밀댓글입니다

[Android] WebView 에서 getGeoLocation이 동작하지 않을 때( getGeoLocation is not working on Android Webview) onGeolocationPermissionsShowPrompt

Posted by Find my true self Fimtrus
2014.02.18 16:50 Programming/Android

웹뷰를 사용하다가 보면 getGeoLocation을 사용할때가 있다.

아이폰에서는 전혀 문제 없이 동작하는데 

안드로이드! 이놈에서만 위치정보를 받지 못한다.

인터넷을 무쟈게 검색후..

해답 발견.

WebChromeClient의 아래 Method를 overriding하여 구성해줘야하는데

코드는 다음과 같다.


@Override
public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {

	final String myOrigin = origin;
	final GeolocationPermissions.Callback myCallback = callback;

	CommonDialogs dialog = new CommonDialogs(MainActivity.this); //custom Dialog

	dialog.showAlertDialog(MainActivity.this, R.string.gps_agree, new DialogInterface.OnClickListener() {

		@Override
		public void onClick(DialogInterface dialog, int which) {
			myCallback.invoke(myOrigin, true, true);
		}
	}, new DialogInterface.OnClickListener() {

		@Override
		public void onClick(DialogInterface dialog, int which) {
			 myCallback .invoke(myOrigin, false, false);
		}
	});

//			super.onGeolocationPermissionsShowPrompt(origin, callback);
}


참고 : http://bbulog.tistory.com/archive/20131125
이 댓글을 비밀 댓글로

[Android] Fragment Width(넓이)

Posted by Find my true self Fimtrus
2014.02.06 18:09 Programming/Android
mRootLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
	@Override
	public void onGlobalLayout() {
		mFragmentWidth = getView().getWidth();
		mFragmentHeight = getView().getHeight();
		if (mFragmentWidth > 0) {
			ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mFragmentWidth);
			mMapView.setLayoutParams(params);
		}
	}
});
이 댓글을 비밀 댓글로

[Android] Uri로 Bitmap 추출

Posted by Find my true self Fimtrus
2014.01.09 11:15 Programming/Android
Bitmap bitmap = null;
try {
	bitmap = Images.Media.getBitmap(getActivity().getContentResolver(), uri);
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
이 댓글을 비밀 댓글로

[Android] 다이얼로그(Dialog) 닫기 방지. 닫히지 않게 하기.

Posted by Find my true self Fimtrus
2013.12.17 17:02 Programming/Android

다이얼로그로 로그인 화면이나, 비밀번호 입력창 등을 만들기도 한다.

가장 많이 사용 하는 것이 AlertDialog.Builder 를 사용할텐데, 

기존에 제공하는 리스너들을 Overriding 해서 사용할 경우

Ok, Cancel 버튼 클릭시 원하지 않게 창이 닫기게 된다.

아래의 방지코드를 넣게 되면 창이 닫기지 않게 된다.


dialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        Button positiveButton = ( (AlertDialog) arg0 ).getButton(AlertDialog.BUTTON_POSITIVE); 
        //Or AlertDialog.BUTTON_NEGATIVE
        positiveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //=========================
            }
        });
    }
});

확인 버튼과 취소 버튼에 대한 리스너를 달아주면 끝!

닫히지 않는 다이얼로그를 볼 수 있다.(닫을때 dismiss 하는 걸 잊으면 안돼요~)

AlertDialog.Builder 를 사용하면 create()를 실행하여 반드시 AlertDialog 객체를 생성한 뒤에 사용해야 setOnShowListener를 볼 수 있다.

이 댓글을 비밀 댓글로

[Android] R.java 가끔 생성안될때

Posted by Find my true self Fimtrus
2013.09.24 13:45 Programming/Android

대부분 개발자들은 이클립스를 사용할때, Build Automatically 옵션을 꺼놓고 사용할 것이다.(나만그런가??)

아무튼...언제부터인지는 모르겠는데 수동으로 빌드를 할 경우 반응이 없는 경우가 있는데

Build Automatically를 체크하고 다시 시도해보길 바란다.

그러면 간단히 해결될 수도 있다..(물론...경우에 따라서 안될수도 있음!!^^;;)


이 댓글을 비밀 댓글로

[Android] 안드로이드 SDK 업데이트 이후 R.java 생성 오류

Posted by Find my true self Fimtrus
2013.09.24 13:42 Programming/Android

안드로이드 SDK Tools가 업데이트(Ver.22 이상) 된 이후로 R.java 생성하는데 오류가 생겼다.

이는 Android SDK Build-tools를 설치하면 간단히 해결된다.


출처 : ALPHAFACTORY


이 댓글을 비밀 댓글로

[Android] GCM Test URL

Posted by Find my true self Fimtrus
2013.09.10 17:49 Programming/Android

일단..내가 필요하기때문에 간단하게 만들어 놨지만,

기능들은 점점 추가될 예정입니다. ( 지금은 하나만 저장되지만, 추후에,, 리스트 저장등..ㅎ)

링크 : GCM 테스트


이 댓글을 비밀 댓글로