BLOG main image
분류 전체보기 (74)
Cocos2d (9)
낙서장 (4)
스토리지 (1)
안드로이드 (54)
유용한링크 (1)
모바일게임 (2)
추천앱 (1)
아이폰 (0)
맛집/여행 (1)
ナイトウェアメンズ
ナイトウェアメンズ
割烹着 オシャレ
割烹着 オシャレ
klicken Sie einfach auf die bi..
klicken Sie einfach auf die bi..
スポーツ
スポーツ
サンダル
サンダル
282,399 Visitors up to today!
Today 42 hit, Yesterday 39 hit
daisy rss
tistory 티스토리 가입하기!
'안드로이드'에 해당되는 글 54건
T map 길찾기 구현
[보호되어 있는 글입니다. 비밀번호를 입력해 주세요.]

Secret Entry! Enter Password



2016.04.12 02:20
  


버전별로 알람처리 방법




int id = 999; //알람아이디값 생성

Intent intent = new Intent(AlarmAddActivity.this, AlarmRecever.class);

//알람이 지정되면 받는 브로드 캐스트 리시

intent.putExtra("idx", id);




PendingIntent sender = PendingIntent.getBroadcast

(AlarmAddActivity.this, id, intent,PendingIntent.FLAG_UPDATE_CURRENT);/

/지연된 인텐드, 알람이 울리면 인텐드 값을 전달한다.


String alamrTime = "2017-11-20 08:00:00";

Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse(alamrTime); // 알람 등록할 시간을 지정해준다


long aTime = System.currentTimeMillis();
long bTime = date.getTime();

//하루의 시간을 나타냄
long interval = 1000 * 60 * 60 * 24;

if(aTime>bTime){ //알람 설정시간이 현재시간 보다 적으면 24후에 알람 설정
bTime += interval;
}

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

if(Build.VERSION.SDK_INT>=23){ //버전별로 알람처리
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, bTime, sender);
}else{
if(Build.VERSION.SDK_INT>=19){
am.setExact(AlarmManager.RTC_WAKEUP, bTime, sender);
}else{
am.set(AlarmManager.RTC_WAKEUP, bTime, sender);
}
}

//휴대폰이 재 부팅되었을때 처리하려면 알람 시간및 내용을 내장 db에 저장후

BOOT_COMPLETED시 다시 불러와서 알람을 재등록한다.

//알람 반복은 AlarmRecever에서 알림 울렸을때 알람 리셋후 재 등록하면 된다.


Name
Password
Homepage
Secret
2016.03.03 10:45
  

https://developers.kakao.com/docs/android 참고.. 디버그 키와 릴리즈 키를 잘 적어줘야 동작합니다.


public class KakaoLogIn extends Activity {


RbPreference pref;

private SessionCallback callback;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);


callback = new SessionCallback();

Session.getCurrentSession().addCallback(callback);

Session.getCurrentSession().checkAndImplicitOpen();


}


private class SessionCallback implements ISessionCallback {


@Override

public void onSessionOpened() {

Log.d("myLog", "onSessionOpened " + "onSessionOpened");

redirectSignupActivity();

}


@Override

public void onSessionOpenFailed(KakaoException exception) {

Log.d("myLog", "onSessionOpenFailed " + "onSessionOpenFailed");


if (exception != null) {

Logger.e(exception);

}

}

}


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

Log.d("myLog", "onActivityResult11 " + "onActivityResult11");


if (Session.getCurrentSession().handleActivityResult(requestCode,

resultCode, data)) {

Log.d("myLog", "onActivityResult " + "onActivityResult");

return;

}


super.onActivityResult(requestCode, resultCode, data);

}


@Override

protected void onDestroy() {

super.onDestroy();

Session.getCurrentSession().removeCallback(callback);

}


protected void redirectSignupActivity() {

Log.d("myLog", "redirectSignupActivity " + "redirectSignupActivity");

requestMe();

// final Intent intent = new Intent(this, SampleSignupActivity.class);

// startActivity(intent);

// finish();

}


private void requestMe() {

UserManagement.requestMe(new MeResponseCallback() {

@Override

public void onFailure(ErrorResult errorResult) {

String message = "failed to get user info. msg=" + errorResult;


}


@Override

public void onSessionClosed(ErrorResult errorResult) {

}


@Override

public void onSuccess(UserProfile userProfile) {

Log.d("myLog", "userProfile" + userProfile.getId());

Log.d("myLog", "userProfile" + userProfile.getNickname());

Log.d("myLog",

"userProfile" + userProfile.getThumbnailImagePath());

}


@Override

public void onNotSignedUp() {

}

});

}


}

Name
Password
Homepage
Secret
2016.03.02 11:25
  

glide와  PhotoViewAttacher   같이 사용시 glide 이미지가 중앙으로 오지 않는 문제가 있다.

아래는 해결법이다.

  String url="";

ImageView img = (ImageView) findViewById(R.id.center);


Glide.with(this).load(url)

.listener(new RequestListener<String, GlideDrawable>() {

@Override

public boolean onException(Exception e, String s,

Target<GlideDrawable> target, boolean b) {


return false;

}


@Override

public boolean onResourceReady(GlideDrawable glideDrawable,

String s, Target<GlideDrawable> target, boolean b,

boolean b1) {

if (mAttacher != null) {

mAttacher.update();

} else {

mAttacher = new PhotoViewAttacher(img);

}

// }

return false;

}

}).diskCacheStrategy(DiskCacheStrategy.ALL).into(img);

Name
Password
Homepage
Secret
2015.10.14 01:06
  

1) 네이버 개발자 , 네이버 로그인 api 로 가서  OAUTH_CLIENT_ID  , OAUTH_CLIENT_SECRET  를 받아옵니다.

2) naver-oauth-login-4.1.4.1-with-sources.jar 파일을 libs 폴더에 넣어줍니다. 

3) activity_login 레이아웃을 하나 만들고 btn_naver 아이디로 버튼을 하나 만들어 줍니다. 


4)소스 

=====================================================================================



public class LogInActivity extends Activity {


private static String OAUTH_CLIENT_ID = "80nOCZ8Up0xxxxxxxxxxxx";  // 1)에서 받아온 값들을 넣어좁니다

private static String OAUTH_CLIENT_SECRET = "Lo7vxxxxxxxxxx";

private static String OAUTH_CLIENT_NAME = "네이버 아이디로 로그인";


private static OAuthLogin mOAuthLoginInstance;

private static Context mContext;


String email = "";

String nickname = "";

String enc_id = "";

String profile_image = "";

String age = "";

String gender = "";

String id = "";

String name = "";

String birthday = "";


String accessToken = "";

String tokenType;




@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);


mContext = getApplicationContext();


setContentView(R.layout.activity_login);


mOAuthLoginInstance = OAuthLogin.getInstance();


mOAuthLoginInstance.init(mContext, OAUTH_CLIENT_ID,

OAUTH_CLIENT_SECRET, OAUTH_CLIENT_NAME);

initSetting();

}


private void initSetting() {


final Button btn_naver = (Button) findViewById(R.id.btn_naver);



btn_naver.setOnClickListener(new View.OnClickListener() {


@Override

public void onClick(View v) {

mOAuthLoginInstance.startOauthLoginActivity(LogInActivity.this,

mOAuthLoginHandler);

}

});


}


private OAuthLoginHandler mOAuthLoginHandler = new OAuthLoginHandler() {

@Override

public void run(boolean success) {

if (success) {

accessToken = mOAuthLoginInstance.getAccessToken(mContext);

String refreshToken = mOAuthLoginInstance

.getRefreshToken(mContext);

long expiresAt = mOAuthLoginInstance.getExpiresAt(mContext);

tokenType = mOAuthLoginInstance.getTokenType(mContext);


Log.d("myLog", "accessToken  " + accessToken);

Log.d("myLog", "refreshToken  " + refreshToken);

Log.d("myLog",

"String.valueOf(expiresAt)  "

+ String.valueOf(expiresAt));

Log.d("myLog", "tokenType  " + tokenType);

Log.d("myLog",

"mOAuthLoginInstance.getState(mContext).toString()  "

+ mOAuthLoginInstance.getState(mContext)

.toString());



new RequestApiTask().execute(); //로그인이 성공하면  네이버에 계정값들을 가져온다.


} else {

String errorCode = mOAuthLoginInstance.getLastErrorCode(

mContext).getCode();

String errorDesc = mOAuthLoginInstance

.getLastErrorDesc(mContext);

// Toast.makeText(mContext, "errorCode:" + errorCode +

// ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();


Toast.makeText(LogInActivity.this, "로그인이 취소/실패 하였습니다.!",

Toast.LENGTH_SHORT).show();

}

};

};


private class RequestApiTask extends AsyncTask<Void, Void, Void> {

@Override

protected void onPreExecute() {


}


@Override

protected Void doInBackground(Void... params) {

String url = "https://openapi.naver.com/v1/nid/getUserProfile.xml";

String at = mOAuthLoginInstance.getAccessToken(mContext);

Pasingversiondata(mOAuthLoginInstance.requestApi(mContext, at, url));


return null;

}


protected void onPostExecute(Void content) {

Log.d("myLog", "email " + email);

Log.d("myLog", "name " + name);

Log.d("myLog", "nickname " + nickname);


if (email == null) {

Toast.makeText(LogInActivity.this,

"로그인 실패하였습니다.  잠시후 다시 시도해 주세요!!",                 Toast.LENGTH_SHORT)

.show();

} else {


}


}


private void Pasingversiondata(String data) { // xml 파싱

String f_array[] = new String[9];


try {

XmlPullParserFactory parserCreator = XmlPullParserFactory

.newInstance();

XmlPullParser parser = parserCreator.newPullParser();

InputStream input = new ByteArrayInputStream(

data.getBytes("UTF-8"));

parser.setInput(input, "UTF-8");


int parserEvent = parser.getEventType();

String tag;

boolean inText = false;

boolean lastMatTag = false;


int colIdx = 0;


while (parserEvent != XmlPullParser.END_DOCUMENT) {

switch (parserEvent) {

case XmlPullParser.START_TAG:

tag = parser.getName();

if (tag.compareTo("xml") == 0) {

inText = false;

} else if (tag.compareTo("data") == 0) {

inText = false;

} else if (tag.compareTo("result") == 0) {

inText = false;

} else if (tag.compareTo("resultcode") == 0) {

inText = false;

} else if (tag.compareTo("message") == 0) {

inText = false;

} else if (tag.compareTo("response") == 0) {

inText = false;

} else {

inText = true;


}

break;

case XmlPullParser.TEXT:

tag = parser.getName();

if (inText) {

if (parser.getText() == null) {

f_array[colIdx] = "";

} else {

f_array[colIdx] = parser.getText().trim();

}


colIdx++;

}

inText = false;

break;

case XmlPullParser.END_TAG:

tag = parser.getName();

inText = false;

break;


}


parserEvent = parser.next();

}

} catch (Exception e) {

Log.e("dd", "Error in network call", e);

}

email = f_array[0];

nickname = f_array[1];

enc_id = f_array[2];

profile_image = f_array[3];

age = f_array[4];

gender = f_array[5];

id = f_array[6];

name = f_array[7];

birthday = f_array[8];


}

}

}

Name
Password
Homepage
Secret
2015.09.02 10:30
  

dex.force.jumbo=true를 

project.properties.에 추가해주면 된다..

Name
Password
Homepage
Secret
2015.09.01 02:31
  

public class DownloadFileAsync extends AsyncTask<String, String, String> {


private ProgressDialog mDlg;

private Context mContext;


public DownloadFileAsync(Context context) {

mContext = context;

}


@Override

protected void onPreExecute() {

mDlg = new ProgressDialog(mContext);

mDlg.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

mDlg.setMessage("다운로드 시작");

mDlg.show();


super.onPreExecute();

}


@Override

protected String doInBackground(String... params) {

publishProgress("max", Integer.toString(100));


int count = 0;


try {

Thread.sleep(100);

URL url = new URL(params[0].toString());

URLConnection conexion = url.openConnection();

conexion.connect();


int lenghtOfFile = conexion.getContentLength();

String folderPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/hellofEnglish/";

String filePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/hellofEnglish/" + "bb.mp3";

File folder = new File(folderPath);

if (folder.exists()) {

} else {

folder.mkdirs();

}



InputStream input = new BufferedInputStream(url.openStream());

OutputStream output = new FileOutputStream(

filePath);


byte data[] = new byte[1024];


long total = 0;


while ((count = input.read(data)) != -1) {

total += count;

publishProgress("progress" ,Integer.toString((int) ((total * 100) / lenghtOfFile)));

output.write(data, 0, count);

}


output.flush();

output.close();

input.close();


// 작업이 진행되면서 호출하며 화면의 업그레이드를 담당하게 된다


} catch (InterruptedException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


// 수행이 끝나고 리턴하는 값은 다음에 수행될 onProgressUpdate 의 파라미터가 된다

return null;

}


@Override

protected void onProgressUpdate(String... progress) {

if (progress[0].equals("progress")) {

mDlg.setProgress(Integer.parseInt(progress[1]));

} else if (progress[0].equals("max")) {

mDlg.setMax(Integer.parseInt(progress[1]));

}

}


@SuppressWarnings("deprecation")

@Override

protected void onPostExecute(String unused) {

mDlg.dismiss();

// Toast.makeText(mContext, Integer.toString(result) + " total sum",

// Toast.LENGTH_SHORT).show();

}

}

'안드로이드' 카테고리의 다른 글

안드로이드 네이버 로그인  (0) 2015.10.14
Cannot merge new index 65608 오류  (0) 2015.09.02
파일다운로드  (0) 2015.09.01
안드로이드 진동과 소리  (0) 2015.08.06
안드로이드 페이스북 4.0 로그인  (1) 2015.07.17
ArrayList 썩기  (0) 2015.05.12
Name
Password
Homepage
Secret
2015.08.06 21:56
  

Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

vibe.vibrate(2000);


Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);

r.play();


<uses-permission android:name="android.permission.VIBRATE"></uses-permission>



'안드로이드' 카테고리의 다른 글

Cannot merge new index 65608 오류  (0) 2015.09.02
파일다운로드  (0) 2015.09.01
안드로이드 진동과 소리  (0) 2015.08.06
안드로이드 페이스북 4.0 로그인  (1) 2015.07.17
ArrayList 썩기  (0) 2015.05.12
String 에 URL이 포함되었는지 체크  (0) 2015.03.11
Name
Password
Homepage
Secret
2015.07.17 11:08
  

1.  https://developers.facebook.com/  -> My app 으로 가서 Add new Apps 을 해줍니다..

  - 앱 이름 입력하고 카테고리를 선택하면 앱 아이디가 생성됩니다.  

  - 패키지명 , 시작 엑티비티 명 등록합니다

  - 자신의 키 해쉬를 등록합니다(구글맵 키등록하고 비슷한데..  openssl 을 설치 해야 됩니다..)


openssl-0.9.8h-1-setup.exe



2. facebook sdk를 다운 받습니다.. 저는 이클립스에서 개발하는지라.. 따로 받아서 처리를 해놓았습니다. 

 - 아래 첨부 파일 받으시면 됩니다.. 압축풀고 이클립스에서 import 합니다.. 


facebook.zip


 - 에러가 난다면 자바 컴파일러를 1.7로 올려줍니다. 빌드타켓도 올려 줍니다.. 

 - 정상적으로 import 하였으면 , 프로퍼티가셔서  Is Library 체크를 해줍니다.~



3. 로그인을 만들 프로젝트를 하나 생성합니다..

 - 프로퍼티에서 외부 라이브러리로  2에서 설정한 facebook 프로젝트를 불러옵니다.



- 페이스북 로그인 엑티비티(어려운 코드는 없고요.. setReadPermissions 에 주의합니다~)


public class FaceLogIn extends Activity {


private CallbackManager callbackManager;

String id="";

String name="";

String email="";

Context mContext;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mContext = getApplicationContext();


FacebookSdk.sdkInitialize(this.getApplicationContext());

setContentView(R.layout.activity_face);


callbackManager = CallbackManager.Factory.create();

LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);

loginButton.setReadPermissions("email");

loginButton.registerCallback(callbackManager,

new FacebookCallback<LoginResult>() {

@Override

public void onSuccess(LoginResult loginResult) {//로그인이 성공되었을때 호출

GraphRequest request = GraphRequest.newMeRequest(

loginResult.getAccessToken(),

                           new GraphRequest.GraphJSONObjectCallback() {

                               @Override

                               public void onCompleted(

                                       JSONObject object,

                                       GraphResponse response) {

                                   // Application code

                                try {

 

id = (String) response.getJSONObject().get("id");//페이스북 아이디값

name = (String) response.getJSONObject().get("name");//페이스북 이름

email = (String) response.getJSONObject().get("email");//이메일

 

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

                               

                              // new joinTask().execute(); //자신의 서버에서 로그인 처리를 해줍니다

                                 

                               }

                           });

                   Bundle parameters = new Bundle();

                   parameters.putString("fields", "id,name,email,gender, birthday");

                   request.setParameters(parameters);

                   request.executeAsync();

}


@Override

public void onCancel() {

Toast.makeText(FaceLogIn.this, "로그인을 취소 하였습니다!", Toast.LENGTH_SHORT).show();

// App code

}


@Override

public void onError(FacebookException exception) {

Toast.makeText(FaceLogIn.this, "에러가 발생하였습니다", Toast.LENGTH_SHORT).show();

// App code

}

});

}


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

callbackManager.onActivityResult(requestCode, resultCode, data);

Log.d("myLog"  ,"requestCode  "  + requestCode);

Log.d("myLog"  ,"resultCode"  + resultCode);

Log.d("myLog"  ,"data  "  + data.toString());

}

}


- 매니페스트

     <activity

            android:name=".FaceLogIn"

            android:screenOrientation="portrait"

           

        </activity>

        <activity android:name="com.facebook.FacebookActivity" >

        </activity>

        <activity

            android:name="com.facebook.LoginActivity"

            android:label="@string/app_name" >

        </activity>


        <meta-data

            android:name="com.facebook.sdk.ApplicationId"

            android:value="@string/app_id" >

        </meta-data>



-string.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>


    <string name="app_id">1에서 받은 자신의 페이스북 앱 아이디를 넣어 줍니다</string>

<string name="share">Share</string>


</resources>


-activity_face.xml

 <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="180dip"

        android:gravity="center"

        android:orientation="vertical" >


        <TextView

            android:layout_width="match_parent"

            android:layout_height="40dip"

            android:gravity="center"

            android:text="Facebook 으로 회원가입/로그인이 가능합니다"

            android:textColor="#000000"

            android:textSize="14dip" >

        </TextView>



        <com.facebook.login.widget.LoginButton

            android:id="@+id/login_button"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center_horizontal"

            android:layout_marginTop="10dip"

            android:gravity="center" />

    </LinearLayout>


4. 앱 배포후 this app still in development mode 문제가 있을때

-> http://stackoverflow.com/questions/21329250/the-developers-of-this-app-have-not-set-up-this-app-properly-for-facebook-login?answertab=active#tab-top 



5. 페이스북 공유하기

CallbackManager callbackManager;

ShareDialog shareDialog;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

FacebookSdk.sdkInitialize(getApplicationContext());

callbackManager = CallbackManager.Factory.create();

shareDialog = new ShareDialog(this);

// this part is optional


if (ShareDialog.canShow(ShareLinkContent.class)) {

ShareLinkContent linkContent = new ShareLinkContent.Builder()

.setContentTitle("제목")

.setContentDescription(

"공유공유")

.setContentUrl(

Uri.parse("https://play.google.com/store/apps/details?id=com.psychology.tarot"))

.build();


shareDialog.show(linkContent);

}

}


@Override

protected void onActivityResult(final int requestCode,

final int resultCode, final Intent data) {

super.onActivityResult(requestCode, resultCode, data);

callbackManager.onActivityResult(requestCode, resultCode, data);

if(resultCode==RESULT_OK){

Toast.makeText(Dialog.this, "공유가 완료 되었습니다", Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(Dialog.this, "공유가 취소/실패 되었습니다", Toast.LENGTH_SHORT).show();

}

finish();

}



'안드로이드' 카테고리의 다른 글

파일다운로드  (0) 2015.09.01
안드로이드 진동과 소리  (0) 2015.08.06
안드로이드 페이스북 4.0 로그인  (1) 2015.07.17
ArrayList 썩기  (0) 2015.05.12
String 에 URL이 포함되었는지 체크  (0) 2015.03.11
이미지 로드 라이브러리 Glide  (0) 2015.03.06
조봉달 | 2016.03.17 10:52 신고 | PERMALINK | EDIT/DEL | REPLY
혹...com.facebook.login.widget.LoginButton 버튼이 아닌 다른 버튼으로 로그인 처리 및 로그 아웃을 할수 있을까요??
Name
Password
Homepage
Secret
2015.05.12 12:22
  

String array[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",

"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",

"Y" };


ArrayList<String> alpabet = new ArrayList<String>();


for (int i = 0; i < array.length; i++) {

alpabet.add(array[i].toString());

}

long seed = System.nanoTime();

Collections.shuffle(alpabet, new Random(seed));

'안드로이드' 카테고리의 다른 글

안드로이드 진동과 소리  (0) 2015.08.06
안드로이드 페이스북 4.0 로그인  (1) 2015.07.17
ArrayList 썩기  (0) 2015.05.12
String 에 URL이 포함되었는지 체크  (0) 2015.03.11
이미지 로드 라이브러리 Glide  (0) 2015.03.06
kakaotalk custom url  (0) 2015.03.04
Name
Password
Homepage
Secret