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
2011년 3월 17일 목요일
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
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);
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
<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
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
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
AdroindManifest.xml 파일에서 버전 정보를 읽는 로직.
PackageManager pm = getPackageManager();
pm.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).versionName;
출처 : http://techdic.tistory.com/49
피드 구독하기:
글 (Atom)