문자 수신 시 앱에서 문자를 인식 할 수 있습니다.


Receiver 하나 등록하면 바로 가능합니다.


1. AnddroidManifest에 permission 등록 및 receiver 등록

<!-- SMS receive permission -->
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<!-- SMS read -->
<uses-permission android:name="android.permission.READ_SMS" />
<!-- SMS receiver -->
<receiver android:name=".receiver.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

2. BroadCaseReceiver class 만들기

public class SmsReceiver extends BroadcastReceiver {
public static final String TAG = "SmsReceiver";
public static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION)) {
Bundle bundle = intent.getExtras();
if(null == bundle) {
return;
}

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);

for(int i = 0 ; i < smsMessages.length ; i++) {
SmsMessage smsMessage = smsMessages[i];
setMessage(context, smsMessage);
}
} else {
Object[] pdusObj = (Object[]) bundle.get("pdus");
if(null == pdusObj) {
return;
}
SmsMessage[] smsMessages = new SmsMessage[pdusObj.length];
for(int i = 0 ; i < pdusObj.length ; i++) {
smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);

setMessage(context, smsMessages[i]);
}
}
}
}

private void setMessage(Context context, SmsMessage smsMessages) {
Log.d(TAG, "DisplayMEssageBody :: " + smsMessages.getDisplayMessageBody());
Log.d(TAG, "DisplayOrinatingAddress" + smsMessages.getDisplayOriginatingAddress());
Log.d(TAG, "EmailBody :: " + smsMessages.getEmailBody());
Log.d(TAG, "originatingAddress :: " + smsMessages.getOriginatingAddress());
Log.d(TAG, "MessageBody :: " + smsMessages.getMessageBody());
Log.d(TAG, "serviceCenterAddress :: " + smsMessages.getServiceCenterAddress());
Log.d(TAG, "time :: " + smsMessages.getTimestampMillis());

// Todo 요기에서 message를 가지고 작업하시면 됩니다.
}
}

 

public static int getpToPx(Context context, int dp) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}

 

내부 저장소 용량 구하기.


1. 총 용량

public static String getLocalTotalMemory() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = 0;
long totalBlocks = 0;
if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
totalBlocks = stat.getBlockCountLong();
} else {
blockSize = stat.getBlockSize();
totalBlocks = stat.getBlockCount();
}
return formatMemorySize(totalBlocks * blockSize);
}

2. 사용가능한 용량

public static String getCurrentRemainLocalMemory() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = 0;
long availableBlocks = 0;
if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
availableBlocks = stat.getAvailableBlocksLong();
} else {
blockSize = stat.getBlockSize();
availableBlocks = stat.getAvailableBlocks();
}

return formatMemorySize(availableBlocks * blockSize);
}


3. 용량의 단위 정하기

public static String formatMemorySize(long memory) {
String suffix = null;

double size = 0;

if(memory >= 1024){
suffix = "_KB";
size = (double) (memory / 1024);

if(size >= 1024) {
suffix = "_MB";
size = (double) (size / 1024);

if(size >= 1024) {
suffix = "_GB";
size = (double) (size / 1024);
}
}
}

size = Math.round(size * 10d)/10d;

StringBuilder resultBuffer = new StringBuilder(Double.toString(size));

if(suffix != null){
resultBuffer.append(suffix);
}

return resultBuffer.toString();
}

+ Recent posts