멍멍이네 블로그

 

 

 

상황

리스트뷰를 만들었는데 리스트뷰의 리스트들이 클릭되지 않음.

다른곳에서 포커스를 가져간걸로 추측됨

 

해결방법

android:descendantFocusability="blocksDescendants"

리스트뷰 아이템.xml 의 레이아웃에 위의 내용을 넣어야됌

 

 

참조 : http://newpouy.pe.kr/56/

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

 

안드로이드 이클립스에서 자바로 코딩을 짜던 중 에러가 뜸.

 

상황

커스텀어뎁터에서 버튼을 만들어서, 버튼에서 새로운 뷰로 이동하려고 함.

 

해결방법

위의 플래그를 선언해준다

 

Intent i = new Intent(getApplicationContext(), MainActivity.class);

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

이클립스 실행 시 밑과같은 에러가 발생함.

 

Android SDK

Error when loading the SDK:

Error: Error parsing SDK경로\system-images\android-22\android-wear\armeabi-v7a\devices.xml

cvc-complex-type.2.4.d:'d:skin' 요소로 시작하는 부적합한 콘텐츠가 발견되었습니다. 여기에는 하위 요소가 필요하지 않습니다.

Error: Error parsing SDK경로\system-images\android-22\android-wear\x86\devices.xml

cvc-complex-type.2.4.d:'d:skin' 요소로 시작하는 부적합한 콘텐츠가 발견되었습니다. 여기에는 하위 요소가 필요하지 않습니다.

 

해결방법 :

Android SDK Manager를 실챙해서

Android 5.1.1 (API 22)에 해당하는 것 중 위에서 5~6번째

 

Android Wear Arm EABI v7a System Image

Android Wear Intel x86 Atom System Image

 

이 두개를 체크한 후 Delete packages... 삭제를 해주고 다시 실행해주세요!

안드로이드 + 페이스북 사용하기 위해서 Facebook SDK 설치 및 세팅 후 프로젝트 생성 후

 


import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.util.Base64;
import android.util.Log;

 

try {
   info = getPackageManager().getPackageInfo(
           "me.croute.test",
           PackageManager.GET_SIGNATURES);
         for (Signature signature : info.signatures) {
             MessageDigest md = MessageDigest.getInstance("SHA");
             md.update(signature.toByteArray());
             Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
         }
  } catch (Exception e) {
   // TODO Auto-generated catch block

            Log.d("error", "e : " + e.toString());
   e.printStackTrace();
  }

 

 

위 코드를 넣으면 로그로 키해시가 불려진다.

자.. 곧바로 페이스북 연동 2편입니다.
이제 새로운 안드로이드 프로젝트를 만들겠습니다.
File > New > Android Project 를 클릭해 다음과 같이 프로젝트를 만듭니다.

다음은 facebook sdk를 받아야 합니다. 아래 파일을 받으시면 될듯 합니다.
facebook_sdk.zip
위 파일을 받으셔서 압축을 푸시면
facebook
drawable
drawable-hdpi
drawable-ldpi
의 네개의 폴더가 생깁니다. 위 폴더에서 facebook 폴더는 생성된 프로젝트의 src/com 디렉토리 밑에
복사하여 주시고 나머지 폴더는 생성된 프로젝트의 res 폴더 밑에 복사(합치기)하여 주시면 됩니다.
그러면 다음처럼 에러가 하나 뜨게 될것입니다.

FdDialog.java를 더블클릭하여 여시고 91 라인(에러가 발생한 부분)에 가시면 R.drawable.facebook_icon 에서 R에
붉은 줄이 그어져 있습니다. 이 에러는 import com.android.facebookcon.R; 를 추가해주시면 없어집니다.

이제 코딩을 시작하겠습니다.
먼저 상수를 보관하기 위해 컨스턴스 클래스를 하나 만들겠습니다.
com.android.facebookcon 패키지 밑에 C.java 파일을 만듭니다.
이클립스에서 클래스 만들기로 만드시면 될듯...
만들어진 C.java 파일은 다음과 같습니다.
****************************C.java******************************
package com.android.facebookcon;

 

public class C
{
  public static final String LOG_TAG = "FacebookCon";
  public static boolean D = true;
  public static final String FACEBOOK_APP_ID = "App id";
  public static final int FACEBOOK_AUTH_CODE = 32665;
}
****************************************************************

다음은 main.xml 의 수정입니다.
다음과같이 수정합니다.
****************************main.xml******************************
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp"
    >
 <EditText
  android:id="@+id/etContent"
  android:layout_width="fill_parent"
  android:layout_height="100dp"
  android:padding="5dp"
  android:textSize="16sp"
  android:gravity="top"
  android:typeface="monospace"
  android:scrollbars="vertical"
  android:background="#FFFFFF"/>

 <LinearLayout
     android:orientation="horizontal"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:padding="5dp"
     android:gravity="center_vertical|center_horizontal"
     >
  <Button
    android:id="@+id/btnLogin"
   android:layout_width="70dp"
   android:layout_height="wrap_content"
   android:text="Login"/>
  <Button
    android:id="@+id/btnFeed"
   android:layout_width="70dp"
   android:layout_height="wrap_content"
   android:text="Write"/>
  <Button
    android:id="@+id/btnLogout"
   android:layout_width="70dp"
   android:layout_height="wrap_content"
   android:text="Logout"/>
 </LinearLayout>

</LinearLayout>
****************************************************************
현재까지의 프로젝트 상황은 다음그림과 같습니다.

 


현재 프로젝트를 실행시키면 다음처럼 실행될것입니다. (FacebookCon.java 파일은 수정하지 않았습니다.)


이제 앞으로 로그인, 글쓰기, 로그아웃 기능을 추가하도록 하겠습니다.
다음편에 계속...

 

출처 : http://jeehun.egloos.com/3998449

오늘은 Android App에서 Facebook에 연동하는 작업을 해보도록 하겠습니다.
Facebook 연동은 다음의 절차를 거치게 됩니다.

1. Facebook에 App 등록하여 App ID 발급
2. Facebook oauth를 통하여 Accesstoken 발급받기
3. Accesstoken을 이용하여 Facebook에 글 올리기

먼저 Facebook 에 App을 등록하는것을 알아봅니다.
Facebook.com에 접속하여 (물론 가입되어 있어야 합니다.)
맨 아래 개발자 링크를 클릭합니다. 아래 그림의 붉은색 부분입니다.
다음은 링크로 들어간 페이지의 최 상단 우측에 있는 내 앱 을 클릭합니다.
다음으로는 +새 애플리케이션 만들기 를 클릭합니다.

필수정보들을 시키는대로 입력합니다.
어플리케이션 만들기를 클릭하면 어플리케이션 만들어집니다.
다음 화면의 모바일 및 장치에서 어플리케이션 ID를 확인합니다.

이제 이 App id를 이용해 액세스 토큰을 얻어오고 이를 이용해 페이스북에 글을 올릴 수 있습니다.
다음편에 계속하도록 하겠습니다.

 

 

출처 : http://jeehun.egloos.com/3998429

 

Intent intent = new Intent(this, MainActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

 

addFlags를 안해주면 어플이 강제종료 될겁니다. 

 

아는분이 필요해서 도와드렸는데, 다른분들께도 도움이 될까 싶어서 지식공유!

 

 

  DisplayMetrics displayMetrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
  int deviceWidth = displayMetrics.widthPixels;
  int deviceHeight = displayMetrics.heightPixels;

 

deviceWidth와 deviceHeight 변수에 가로와 세로에 해당하는 각각의 해상도값이 들어감.

WebView wv = (WebView)findViewById(R.id.webview);

 

WebSettings set = wv.getSettings();

 

set.setJavaScriptEnabled(true) // 자바스크립트 실행가능

set.setJavaScriptCanOpenWindowsAutomatically(true); // 자바스크립트가 window.open()을 사용가능

set.setBuiltInZoomControls(true); // 줌아이콘 사용가능

set.setPluginState(WebSettings.PluginState.ON_DEMAND); // 플러그인 사용가능

set.setSupportMultipleWindows(true); // 여러개 윈도우 사용 가능

set.setBlockNetworkImage(true); // 네트워크의 이미지의 리소스를 로드하지 않음

set.setLoadsImagesAutomatically(true); // 웹뷰가 앱에 등록되어 있는 이미지 리소스를 자동으로 로드

set.setUseWideViewPort(true); // wide viewport를 사용

set.setCacheMode(WebSettings.LOAD_NO_CACHE); // 웹뷰가 캐시를 사용하지 않음

 

출처 : http://it77.tistory.com/117

다른 블로그들 참고하는데 안되다가 되는 블로그 발견!

file = File 클래스 변수임(안나와있는데 대충 File클래스 메소드를 사용하길래 해당 자료형의 변수로 선언했더니 잘됨.

참고로 파일에 해당하는 뷰어나 볼 수 있는 프로그램이 있어야됨.

 

  Intent intent = new Intent();
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setAction(android.content.Intent.ACTION_VIEW);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  if (file.getName().endsWith(".pdf")){

 intent.setDataAndType(Uri.fromFile(file), "application/pdf");
  }else if (file.getName().endsWith(".hwp")){
intent.setDataAndType(Uri.fromFile(file), "application/hwp");
  }
  try{
   startActivity(intent);
  }catch(ActivityNotFoundException e){
   util.showLongToast("해당파일을 실항할 수 있는 어플리케이션이 없습니다.\n파일을 열 수 없습니다.");
   e.printStackTrace();
  }

 

pdf = "application/pdf"

jpg 등 = "image/*"

docx = "application/msword"

txt = "text"

pptx = "application/vnd.ms-powerpoint"

hwp = "application/haansofthwp"

mp3 = "audio/*"

mp4 = "video/*"

 

 

...

 

mineType 안헷갈리게 조심!

 

 

출처 : http://ldelight.tistory.com/20

확장자 출처 : http://anditstory.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%ED%8C%8C%EC%9D%BC-%EC%97%B0%EA%B2%B0-Intent-setDataAndTypeUri-MimeType