apk 설치

카테고리 없음 2013. 1. 11. 12:20
Boolean value = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
if(value){
Log.d("SDCARD", "__________ sd card is exist");
} else {
Toast.makeText(getApplicationContext(), "sd카드가 있어야 설치가 됩니다.", 0).show();
}

URL myFileUrl = null;
try {
            myFileUrl= new URL(fileUrl);
            myFileUrl_Global = new URL(fileUrl); 
} catch (MalformedURLException e) {
            e.printStackTrace();
}

File apkFile = new File(Environment.getExternalStorageDirectory()+ "/ListViewTest.apk");//HelloAndroid.apk
                  Log.d("file", apkFile.toString());
                  Uri apkUri = Uri.fromFile(apkFile);
                  Log.d("uri", apkUri.toString());      
                  try 
                  {
                  Intent intent = new Intent(Intent.ACTION_VIEW);
                  intent.setDataAndType( apkUri, "application/vnd.android.package-archive");
                  startActivity(intent);
                  ListViewActivity.this.finish();
                  
                  
                  
                  }
                  catch (Exception e) 
                  {
                  // TODO: handle exception]
                  Log.d("Exception", e.toString());
                  }



http://www.androidpub.com/1294511


http://neoroid.tistory.com/entry/%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%9B%EC%9D%80-pdf-%EB%82%98-apk-%ED%8C%8C%EC%9D%BC-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0



http://sdop.egloos.com/3630690

Posted by [czar]
,

apk 설치

카테고리 없음 2013. 1. 9. 14:09

package com.innoace.test.install;


import java.io.File;


import android.app.Activity;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.net.Uri;

import android.os.Bundle;

import android.util.Log;


public class APKInstall extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        File apkFile = new File("/sdcard/FileBrowser.apk");

        Uri apkUri = Uri.fromFile(apkFile);

        Log.i("APKInstall", "Set apk path");


        try {

         Intent intent = new Intent(Intent.ACTION_VIEW);

         intent.setDataAndType( Uri.fromFile(apkFile), "application/vnd.android.package-archive");

         startActivity(intent);

         Log.i("APKInstall", "APK installed");

  } catch (Exception e) {

   // TODO: handle exception

   Log.i("APKInstall", e.getMessage());

  }


//        PackageManager pm = getPackageManager();

//        pm.installPackage(apkUri);

    }

}



http://www.androidpub.com/96985

http://android.amberfog.com/?p=98

Posted by [czar]
,
/**
 * Indicates whether the specified action can be used as an intent. This
 * method queries the package manager for installed packages that can
 * respond to an intent with the specified action. If no suitable package is
 * found, this method returns false.
 *
 * @param context The application's environment.
 * @param action The Intent action to check for availability.
 *
 * @return True if an Intent with the specified action can be sent and
 *         responded to, false otherwise.
 */

public static boolean isIntentAvailable(Context context, String action) {
   
final PackageManager packageManager = context.getPackageManager();
   
final Intent intent = new Intent(action);
   
List<ResolveInfo> list =
            packageManager
.queryIntentActivities(intent,
                   
PackageManager.MATCH_DEFAULT_ONLY);
   
return list.size() > 0;

}


http://android-developers.blogspot.kr/2009/01/can-i-use-this-intent.html

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
   
final boolean scanAvailable = isIntentAvailable(this,
       
"com.google.zxing.client.android.SCAN");

   
MenuItem item;
    item
= menu.findItem(R.id.menu_item_add);
    item
.setEnabled(scanAvailable);

// 사용 불가능 할 때 disable

   
return super.onPrepareOptionsMenu(menu);
}


찾아보니 카카오톡에서도 이와 비슷한 코드를 사용하였네요.

String KakaoLinkURLBaseString = "kakaolink://sendurl";

public boolean isAvailableIntent() {

Uri kakaoLinkTestUri = Uri.parse(KakaoLinkURLBaseString);

Intent intent = new Intent(Intent.ACTION_SEND, kakaoLinkTestUri);

List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

if (list == null)

return false;

return list.size() > 0;

}


// 이건 참고용

public boolean isAvailableIntent(String url) {

   System.out.println("isAvailableIntent = " + url);

        Uri LinkTestUri = Uri.parse(url);

        Intent intent = new Intent(Intent.ACTION_VIEW, LinkTestUri);

        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

        if( list != null) {

            for(int i = 0 ; i < list.size(); i++){

                ResolveInfo info = list.get(i);

                System.out.println(info.activityInfo);

            }

        }


        return list.size() > 0;

    }



어플 정보 가져오기

private void showShareAvailableApps() {

    final PackageManager packageManager = this.getApplicationContext().getPackageManager();      

    Intent intent = new Intent(Intent.ACTION_MAIN, null);

    intent.addCategory(Intent.CATEGORY_LAUNCHER);      

    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 

                            PackageManager.MATCH_DEFAULT_ONLY);         

    for (ResolveInfo info : list) {

        String appActivity      = info.activityInfo.name;

        String appPackageName   = info.activityInfo.packageName;

        String appName          = info.loadLabel(packageManager).toString();

        Drawable drawable = info.activityInfo.loadIcon(packageManager);

        Logger.d(TAG, "appName : " + appName + ", appActivity : " + appActivity 

                    + ", appPackageName : " + appPackageName);

    }

}


Posted by [czar]
,

hashmap 정렬

카테고리 없음 2012. 12. 12. 17:06

http://www.shop-wiz.com/board/main/view/root/java01/50/0/1

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class SimpleMapSortTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String, String> addr = new HashMap<String, String>();
        addr.put("다","1");
        addr.put("가","2");
        addr.put("나","3");
        addr.put("라","4");

        Set<String> set = addr.keySet();
        Object []hmKeys = set.toArray();
        Arrays.sort(hmKeys, keyStringSort); // 키값 정렬하기
        for(int i = 0; i < hmKeys.length; i++)
        {
            String key = (String)hmKeys[i];
            System.out.println(key);
        }
    }
    public static Comparator<Object> keyStringSort = new Comparator<Object>() {
        public int compare(Object s1, Object s2) {
            String ss1 = (String)s1;
            String ss2 = (String)s2;
            return (-1) * ss2.compareTo(ss1);
        }
    };
}


############# result




Posted by [czar]
,

  DisplayMetrics displayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int pxWidth  = displayMetrics.widthPixels;
int pxHeight = displayMetrics.heightPixels;

//--- displayMetrics.density : density / 160, 0.75 (ldpi), 1.0 (mdpi), 1.5 (hdpi)
int dipWidth  = displayMetrics.widthPixels  / displayMetrics.density;
int dipHeight = displayMetrics.heightPixels / displayMetrics.density;


http://show.ideatree.kr/pages/?board_content_idx=2854

Posted by [czar]
,

http://blog.naver.com/PostView.nhn?blogId=shuiky&logNo=10045324570&viewDate=&currentPage=1&listtype=0

최근 카드번호가 '6' 으로 시작되는 카드가 발행되기 시작했습니다.  해당카드는 중국은련카드로 중국의 은행들이 연합하여 발행하는 신용카드입니다. 일본의 JCB, 한국의 BC카드와 같은 형태라 할 수 있습니다.  우리나라에서는 BC카드와 제휴하여 BC카드에서 카드를 발행하기 시작했군요.

신용카드번호를 살펴 보면 재미있는 사항들을 알 수가 있습니다. 신용카드번호의 체계에 대해서 최근 언론에 보도되고 있어서 간단하게 요약 정리해 보겠습니다.

아래 내용을 보시면 전세계가 공통적인 방식으로 카드번호 체계를 공유하고 있기 때문에 우리나라에서만 그 체계를 변경한다는 것은 현실적으로 불가능 합니다. 단, 국내전용카드(Local Card)의 경우에는 발급은행(발급사)에서 임의로 그 체계를 정할 수 있습니다.

16자리/13자리/14자리/15자리등 다양한 번호가 사용되지만, 일반적인 16자리 번호를 기준으로 설명하겠습니다.


○ 신용카드번호 첫1자리 : 카드브랜드

4 : VISA카드
5 : Master카드
3 : JCB, 아멕스, 다이너스 등  (아멕스카드는 15자리,  다이너스는 14자리) ※ 일반적으로 JCB로 보면 됩니다.
6 : 이면 중국은련카드
9 : Local카드 (국내전용카드)
 
※ 기타 1과 2로 시작되는 신용카드가 있는데 요즘은 발급되지 않고 있습니다.


○ 신용카드번호 첫6자리 : Bin번호 (Bank Identifier Number)

전세계적으로 발행기관(은행/카드사등)을 인식할 수 있는 번호

본 번호를 카드대분류(일반/특별/법인/Check카드 등)로 사용하여 카드번호만으로 카드종류를 인식할 수 있도록많이 사용합니다. 각 발급기관별로 수개에서 수십개의 Bin번호를 가지고 있으며, 발급기관이 각 카드브랜드(비자,마스타등)에 신청하여 그 번호를 부여받고 카드발급을 합니다.


○  Bin번호를 제외한 9자리

발행기관의 일련번

[출처] 신용카드번호 규칙|작성자 쉬끼

(보통 첫자리는 발행기관별로 카드대분류로 사용하는 경우가 많습니다.)


○  맨 마지막 자리 : Check Digit (검증번호)


위에 언급한 VISA/MSATER/JCB등 국제카드는 전부 다음과 같은 형식의 검증번호 체계를 따르게 되어 있습니다.


    예시번호 : 4 5 1 8 4 3 4 0 0 2 0 7 6 6 0 0


Step 1. 검증번호를 제외한 번호에 2,1을 반복적으로 곱해서 그 합을 구합니다.

[출처] 신용카드번호 규칙|작성자 쉬끼


        4  5  1  8  4  3  4  0  0  2  0  7  6  6  0  0
        2  1  2  1  2  1  2  1  2  1  2  1  2  1  2
        -------------------------------------------------------
        8  5  2  8  8  3  8  0  0  2  0  7 12  6 0   

[출처] 신용카드번호 규칙|작성자 쉬끼



     Step 2.  구해진 값을 전부 합산한다.

        단,10을 초과하는 경우는 두숫자를 더합니다.  (위에서는 12가 있는데 이 경우는 1+2로 계산)

        8+5+2+8+8+3+8+0+0+2+0+7+1+2+6+0  = 60

     Step 3.  위에서 구한 값을 10으로 나눈 나머지 값을 구합니다.

        60 / 10 =  몫 6, 나머지 0

     Stem 4.  위에서 구한 나머지값을 10 에서 빼면 그것이 Check Digit 입니다.
                  (예: 나머지가 4이면 Check Digit는 6 입니다.)

                  단, 나머지가 0인 경우에는 그대로 0 이 Check Digit로 사용

     위에 경우에는 나머지가 0 이므로 Check Digit가 0 이네요. 

※ 참고로 국내전용카드는 9로 시작되고 Check Digit산출 방식이나 Check Digit의 위치가 각 카드사별로 상이하게 발급되고 있습니다.

[출처] 신용카드번호 규칙|작성자 쉬끼

[출처] 신용카드번호 규칙|작성자 쉬끼


Posted by [czar]
,

Dialog

다이얼로그 버튼 확인,취소 디자인 적용


(dlg.findViewById(android.R.id.button1)).setBackgroundResource(R.drawable.control_button_basic);

(dlg.findViewById(android.R.id.button2)).setBackgroundResource(R.drawable.control_button_cancel);


android.R.id.button1 for positive, 

android.R.id.button2 for negative, 

android.R.id.button3 for neutra

Posted by [czar]
,

ContextThemeWrapper ctw = new ContextThemeWrapper( this, R.style.AlertDialogCustom);
AlertDialog.Builder builder= new AlertDialog.Builder( ctw );
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AlertDialogCustom" parent="@android:style/AlertDialog">
        <item name="android:textColor">#00FF00</item>
        <item name="android:typeface">monospace</item>
        <item name="android:textSize">10sp</item>
    </style>
</resources>

Posted by [czar]
,
Posted by [czar]
,

웹뷰에서 callback 사용시 proguard 적용하기


JavascriptCallback.java

public interface JavascriptCallback {

public void WebCallBack();

public void WebCallback(String a, String b, String c);

}


인터페이스 하나 만들고


웹뷰

WebView.java 에서는 

wvContents.addJavascriptInterface(new JavascriptInterface(), "Event");

public class JavascriptInterface implements JavascriptCallback {

public void WebCallBack() {

// TODO

}

public void WebCallBack(String a, String b, String c) {

// TODO

}

}

proguard 에서는

-keep public class YOURPACKAGENAMEHERE.JavascriptCallback
-keep public class * implements YOURPACKAGENAMEHERE.JavascriptCallback
-keepclassmembers class * implements YOURPACKAGENAMEHERE.JavascriptCallback {
    <methods>;
}


http://stackoverflow.com/questions/7424510/uncaught-typeerror-when-using-a-javascriptinterface



프로가드 멀고도 험하게 적용했다. 


호출은

window.Event.WebCallBack();



Posted by [czar]
,