2011년 3월 17일 목요일

Android : Android pixcel to dpi

final float scale = getContext().getResources().getDisplayMetrics().density;

final float densityDpi = getContext().getResources().getDisplayMetrics().densityDpi;

float pxPerInch = 340; // default value - note it's a new density in API version 9.
switch(densityDpi){
     case DisplayMetrics.DENSITY_LOW:
                 pxPerInch = 120 * scale;
                 break;
     case DisplayMetrics.DENSITY_MEDIUM:
                 pxPerInch = 160 * scale;
                 break;
     case DisplayMetrics.DENSITY_HIGH:
                 pxPerInch = 240 * scale;
                 break;
}

출처 : http://blog.naver.com/lowmans/100123712145

Android : 단말기 정보 확인

TelephonyManager tpMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String alphName = tpMgr.getNetworkOperatorName();

Log.d("Telephony", "alphName:\t" + alphName); // 통신사
Log.d("", "SDK:" + android.os.Build.VERSION.RELEASE); // 버젼 sdk:2.1-update1
Log.d("", "MODEL:" + android.os.Build.MODEL); // Device Model

출처 : http://blog.naver.com/lowmans/100123923127

Android : 어플실행시키기(Package name으로 액티비티 실행)

Package name으로 액티비티 실행하는 로직.

Intent intent = this.getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
 

Android : 안드로이드 마켓 License Validation Library 사용하기

[권한]
<uses-permission android:name="com.android.vending.CHECK_LICENSE />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


[import]
import android.telephony.TelephonyManager;
import com.android.vending.licensing.AESObfuscator;
import com.android.vending.licensing.LicenseChecker;
import com.android.vending.licensing.LicenseCheckerCallback;
import com.android.vending.licensing.ServerManagedPolicy;


[class]
 private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
    @Override
    public void allow() { 
        if (isFinishing()) { 
            return; 
        } 
        // 라이선스 인증에 성공했을때 수행할 일을 여기에 추가 
    } 
    @Override
    public void applicationError(ApplicationErrorCode errorCode) { 
        // 에러 메시지 출력 등의 루틴 추가 
    } 
    @Override
    public void dontAllow() { 
        if (isFinishing()) { 
            return; 
        } 
        // 라이선스 인증에 실패했을 때 수행할 일을 여기에 추가 
    } 
}

[onCreate]
 public class MainActivity extends Activity { 
     // 2에서 확인한 public key 
     private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG ... ";  
     // 20개의 랜덤한 byte 
     private static final byte[] SALT = {-46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95,  
                          -45, 77, -117, -36, -113, -11, 32, -64, 89};  
   
     private LicenseCheckerCallback mLicenseCheckerCallback; 
     private LicenseChecker mChecker; 
     @Override
     public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
   
         // LicenseCheckerCallback 초기화 
         mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
   
         // 디바이스 아이디를 얻기 위한 루틴 
         TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
         String deviceId = tm.getDeviceId(); 
   
         // LicenseChecker 초기화 
         mChecker = new LicenseChecker(  
                 this,  
                 new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)), 
                 BASE64_PUBLIC_KEY); 
   
         // License Validation 실행 
         mChecker.checkAccess(mLicenseCheckerCallback); 
     } 
   
     @Override
     protected void onDestroy() { 
         super.onDestroy(); 
         mChecker.onDestroy(); // 어플리케이션 종료시 메모리 반환 
     } 
}

출처 :  http://techdic.tistory.com/48

Android : 디바이스에 설치된 어플리케이션(액티비티) 목록 얻기

멋진 소스

PackageManager manager = getPackageManager();
List<PackageInfo> appInfoList = manager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (int j = 0, jend = appInfoList.size(); j < jend ; j++) {
   PackageInfo pi = appInfoList.get(j);
}

출처 : http://blog.naver.com/PostView.nhn?blogId=dong277&logNo=130104023606&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true&topReferer=http%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fwhere%3Dnexearch%26sm%3Dies_hty%26ie%3Dutf8%26query%3DgetPackageManager%28%29

Android : 현재 실행 가능한 어플리케이션(액티비티) 목록 얻기

멋진 소스 발견.

PackageManager manager = getPackageManager();


final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = manag.queryIntentActivities(mainIntent, 0);
for (int i = 0, iend = resolveInfos.size(); i < iend; i++) {
   ResolveInfo ri = resolveInfos.get(i);
   String pkgName = ri.activityInfo.applicationInfo.packageName; //패키지 이름
   String className = ri.activityInfo.name; //클래스 이름(실행되는 액티비티 이름)
   ComponentName componentName = new ComponentName(pkgName, className); //컴포넌트 생성 코드
   CharSequence title = ri.loadLabel(manager); //어플리케이션 이름
   Drawable icon = ri.activityInfo.loadIcon(manager); //어플리케이션 아이콘 Drawable
   boolean thirdPartyFlag = false;
   if ((ri.activityInfo.applicationInfo.flags
          & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0 ) {
      // 다운로드 받은 어플리케이션
      thirdPartyFlag = true;
   } else {
      // 프리로드된 어플리케이션
   }
   boolean isExternalApp = false;
   if ((info.activityInfo.applicationInfo.flags & android.content.pm.ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
      // 외장메모리에 설치되는 어플리케이션
      isExternalApp = true;
   } else {
      // 내장메모리에 설치되는 어플리케이션
      isExternalApp = false;
   }
}

출처 : http://blog.naver.com/PostView.nhn?blogId=dong277&logNo=130104023606&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true&topReferer=http%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fwhere%3Dnexearch%26sm%3Dies_hty%26ie%3Dutf8%26query%3DgetPackageManager%28%29

Android : 어플리케이션 버전 정보 얻기

어플 배포시 마다 도움말/이번 버전의 갱신 내용등을 보여 줄때 일일이 버전 정보를 수정하였었는데. 아래의 로직으로 쉽게 처리할 수 있을 거 같네요.

AdroindManifest.xml 파일에서 버전 정보를 읽는 로직.

PackageManager pm = getPackageManager();
pm.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).versionName;

출처 : http://techdic.tistory.com/49