2011.03.28 00:33


dos -> telnet localhost 5554 -> power capacity 80 ( 배터리 잔량을 80%로 주고 테스트 한다. ) 
신고
Posted by 구름같은사나이
2011.03.26 13:31
receiver com.battery.SBattery.Receiver.SBatteryWidgetProvider: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents

안드로이드 프로그래밍 시, 이와 같은 오류를 만날 가능성이 있다.
이유인즉, 리시버 안에 리시버를 등록 할 수 없다는 것이다.

해결책이 있다.

넘겨주는 context의 값을 context.getApplicationContext() 로 설정 하라.

오류가 없어질 것이다. ( 안드로이드 2.2 테스트 ) 
신고
Posted by 구름같은사나이
2011.03.16 10:40

구글 GMail Smtp 를 이용하여 메일 전송하기 입니다.

간단한 예제만 올림. (설명은 생략~)

준비 사항 : 3개의 개별 라이브러리가 필요. mail.jar , activation.jar , additionnal.jar


1. 메일 전송을 담당하는 클래스 생성

import java.util.Date;

import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class EmailTest{
private String mailhost = "smtp.gmail.com";
private Session session;
public AllModel_Security_Mail(String user, String pwd)
{
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", mailhost);
session = Session.getInstance(props, new EmailAuthenticator(user,pwd));
}
public void sendMail(String subject,String body, String sender,String recipients)
throws Exception
{
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(sender));
msg.setSubject(subject);
msg.setContent(body, "text/html;charset=EUC-KR");
msg.setSentDate(new Date());
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(msg);
}
class EmailAuthenticator extends Authenticator {
private String id;
private String pw;
public EmailAuthenticator(String id, String pw) {
super();
this.id = id;
this.pw = pw;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(id, pw);
}
}
}

2. 메일 전송 클래스내 구현부

try
{
EmailTest mail = new EmailTest("sender@gmail.com","password");  //보내는 사람 메일 주소와 암호
      
        //순서대로, 제목 - 본문 - 보내는 사람 메일 - 받는 사람 메일 
mail.sendMail("메일에 들어가는 제목 부분 입니다.", 
     "메일에 들어가는 본문 부분 입니다.",
             "sender@gmail.com",  "test@naver.com");                      
        
}catch (Exception e) {}


신고
Posted by 구름같은사나이
2011.03.10 18:10


다음 클래스는 전화번호를 가지고 DB에 저장되어 있는 Contact의 id 값과 이름. 그리고 그에 해당되는 사진 photo값을 가져오는 
클래스 이다.
* 2.2 기준입니다. *

...

public class ContactInfo
{
String name;
String id;
final String[] CONTACTS_PROJECTION = new String[]{
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME 
}; 
                
                //본 생성자에서는 인자값으로 넘어온 전화번호(number)에 해당되는 contact id 와 catact name을 
               가져와서 멤버 변수 name과 id에 저장해 준다.

public ContactInfo(ContentResolver resolver, String number)
{
Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI , 
CONTACTS_PROJECTION, 
ContactsContract.CommonDataKinds.Phone.NUMBER+"=?", 
new String[]{number}, null);
if(cursor.getCount() < 1)
{
name = null;
id = null;
}
else
{
cursor.moveToFirst();
id = cursor.getString(0);
name = cursor.getString(1);
}
cursor.close();
}

               //위 생성자에서 구해진 id 값을 기준으로 해서 id와 name에 일치하는 Contact의 사진을 가져와서
               Bitmap 형식으로 반환해 준다.

public Bitmap getPhoto()
{
if(id == null) return null;
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,Long.parseLong((id)));
InputStream data = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), uri);
if(data != null)
return BitmapFactory.decodeStream(data);
else
return null;
}
}
신고
Posted by 구름같은사나이
2011.03.10 11:18

- 안드로이드 2.2 기준 -


1) 아래와 같이 Intent 를 날리면, Contact 주소록과 함께, 연락처 항목을 선택 할 수 있다.
...
Intent intent = new Intent(Intent.ACTION_PICK);
 intent.setData(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
         startActivityForResult(intent, 0);
...


2) onActivityResult 를 이용해서, 선택한 Contact 값을 읽어 온다.
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK)
{
Cursor cursor = getContentResolver().query(data.getData(), 
new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
cursor.moveToFirst();
                  mName.setText(cursor.getString(0));        //이름 얻어오기
             mNumber.setText(cursor.getString(1));     //번호 얻어오기
            cursor.close();
}
super.onActivityResult(requestCode, resultCode, data);
}
...
신고
Posted by 구름같은사나이
2011.03.09 15:32
               락 스크린을 해지 시켜주는 코드 부분.


             KeyguardManager manager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);  
KeyguardLock lock = manager.newKeyguardLock(KEYGUARD_SERVICE);  
lock.disableKeyguard();  

               - 필요한 Permmision -

                <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
               
신고
Posted by 구름같은사나이
2011.03.09 14:47
                
               EditText의 경우, 한글 기준하여 Byte값을 이와 같이 TextWatcher  리스너를 구현하여 계산할 수 있다. 
               또한, 메세지 어플을 제작할 경우 80Byte 한계 치를 조정 할 수도 있다.

   ( 리스너에서 EditText 값을 변경 하려는 경우 StackOverFlow가 발생하여 ANR이 뜨게 되니 
     주의 하자. )
    
   private EditText mContent;
   private TextView mByte;
   
   ...

               //Byte 계산을 위한 EditText 이벤트
private TextWatcher editEvent = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(mContent.isFocusable())
{
try
{
byte[] bytetext = mContent.getText().toString().getBytes("KSC5601");
mByte.setText(Integer.toString(bytetext.length)+" Byte");
}catch(Exception ex){}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
String after_text = s.toString();
try
{
byte[] getbyte = after_text.getBytes("KSC5601");
if(getbyte.length > 80)
{
s.delete(s.length()-2, s.length()-1);
}
}catch (Exception e) {}
}
};

                ...
신고
Posted by 구름같은사나이
2011.03.09 14:41

진동상태의 핸드폰을 이와 같은 코드를 이용해서 가장 큰 벨음량으로 소리내게 할 수 있다.

...

AudioManager manager = (AudioManager)getSystemService(AUDIO_SERVICE);
int max = manager.getStreamMaxVolume(AudioManager.RINGER_MODE_NORMAL);
manager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
manager.setStreamVolume(AudioManager.STREAM_RING, max, AudioManager.FLAG_PLAY_SOUND);
mRing = RingtoneManager.getRingtone(this,RingtoneManager.getActualDefaultRingtoneUri
                                                                                       (this,RingtoneManager.TYPE_RINGTONE));
mRing.play();

...
신고
Posted by 구름같은사나이
2011.03.09 14:37
              

                AndroidManifast 파일 구현부에, 
                 ...
                <receiver android:name="TestReceiver">
<intent-filter android:priority="99999999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver> 
                ...

                 BroadCastReceiver를 구현한 onReceive 함수에 abortBroadcast(); 추가


                 위와 같이 정의해 두면 타 어플리케이션의 BroadCastReceiver에서 감지 하지 못한다. ( 우선 순위를 이용한 )
신고
Posted by 구름같은사나이
2011.03.09 14:33

안드로이드의 SMS 수신과 송신 구현.
참고 할 것은 SMS 송신시에는 타 SMS 어플에 그 내역이 남지 않음. 


public class Test extends BroadcastReceiver {

      private final String SMS_R = "android.provider.Telephony.SMS_RECEIVED";
             
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();

if(action.equals(SMS_R))
{
                    //SMS 수신 부분 
Object[] pdu = (Object[])intent.getExtras().get("pdus");
SmsMessage[] msg = new SmsMessage[pdu.length];
for(int i = 0; i <msg.length; i++)
{
msg[i] = SmsMessage.createFromPdu((byte[])pdu[i]);
String number = msg[i].getOriginatingAddress();                   //송신자 전화번호
String content = msg[i].getDisplayMessageBody();               //송진자 내용
                                
                                //SMS 발신 부분
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(mNumber, null, mContent , null, null);  
                                //mNumber 는 받는 사람 전화번호  , mContent 는 보내는 내용
...


- 필요 Permission (SMS 관련) -

<uses-permission android:name="android.permission.WRITE_SMS" />       //SMS Provider로 전송
<uses-permission android:name="android.permission.SEND_SMS" />        //SMS 발송 가능
<uses-permission android:name="android.permission.RECEIVE_SMS" />   //수신 모니터링 
<uses-permission android:name="android.permission.READ_SMS" />        //SMS 읽기 관련
신고
Posted by 구름같은사나이

티스토리 툴바