안드로이드 개발의 간단한 문자 조작 모듈

9235 단어 android개발 실례
최근에 간단한 문자 조작 모듈을 만들었는데 비교적 실용적이고 깜찍하다.주요 기능은 문자메시지(문자 발송 상태의 알림 포함), 문자메시지 저장(문자 리스트 표시 등에 사용), 문자메시지 저장은 SQLite를 사용할 수 있지만 몇 십 개에서 백 개에 달하는 문자메시지라고 생각하기 때문에 SQLite는 대재소용이 없고 번거롭기 때문에 SharePreference와 대상을 결합시켜 서열화하여 이 모듈을 만들기로 결정했다.
먼저 문자 실체 클래스를 복원하기 위해 추상 클래스로 만들고 구체적인 프로젝트에서 이 추상 클래스를 계승하면 된다.
public abstract class Message implements Serializable{
	private String number;
	//private int playTime;
	private int id;
	private String userName;
	private String messageText;
	private String time;
	
	
	
	public Message(String number, int playTime, int id, String userName,
			String messageText, String time) {
		super();
		this.number = number;
	//	this.playTime = playTime;
		this.id = id;
		this.userName = userName;
		this.messageText = messageText;
		this.time = time;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getMessageText() {
		return messageText;
	}
	public void setMessageText(String messageText) {
		this.messageText = messageText;
	}
	public String getTime() {
		return time;
	}
	public void setTime(String time) {
		this.time = time;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "  :"+this.number+",  :"+this.userName+",  :"
				+this.id+",    :"+this.messageText;
	}
	
	
}

몇 개의 문자메시지에 필요한 데이터를 구성원 변수로 가지고 다시 tostring 방법을 사용합니다.
핵심 조작 유형,MessageUtils는 문자 발송 방법을 가지고 발송이 끝난 후에 문자 메시지를 저장하는 것, 문자 발송의 성공 여부, 수신의 성공 여부 상태에 대한 피드백 기능을 포함하여 단일 문자 메시지와 모든 문자 수령에 대외 인터페이스를 제공하여 사용할 때 매우 편리하다.
public class MessageUtils {

	//private Message message;
	private Context context;
	
	private String SENT_SMS_ACTION = "SENT_SMS_ACTION";  
	private String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; 
	
	//           Intent
	private Intent sentIntent;  
	private PendingIntent sentPI;  
	//           Intent
	private Intent deliverIntent;  
	private PendingIntent deliverPI;  
	
	public MessageUtils(Context context) {
		super();
		
		this.context = context;
		sentIntent = new Intent(SENT_SMS_ACTION);  
		
		deliverIntent = new Intent(DELIVERED_SMS_ACTION);
		
	}

	/**
	 *      
	 * @param message
	 * @return
	 * @throws IOException
	 */
	private String serialize(Message message) throws IOException {  
       
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(  
                byteArrayOutputStream);  
        objectOutputStream.writeObject(message);  
        String serStr = byteArrayOutputStream.toString("ISO-8859-1");  
        serStr = java.net.URLEncoder.encode(serStr, "UTF-8");  
        objectOutputStream.close();  
        byteArrayOutputStream.close();  
       
        return serStr;  
    }  
  
    /** 
     *        
     *  
     * @param str            
     * @return 
     * @throws IOException 
     * @throws ClassNotFoundException 
     */  
	private  Message deSerialization(String str) throws IOException,  
            ClassNotFoundException {  
        if(str == null || str == ""){
        	return null;
        }
        String redStr = java.net.URLDecoder.decode(str, "UTF-8");  
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(  
                redStr.getBytes("ISO-8859-1"));  
        ObjectInputStream objectInputStream = new ObjectInputStream(  
                byteArrayInputStream);  
        Message message = (Message) objectInputStream.readObject();  
        objectInputStream.close();  
        byteArrayInputStream.close();  
        
        return message;  
    }  
    /**
     *     
     * @param strObject        String     
     * @param num         
     */
    private  void  saveMessage(Message message,int num) {
    	String strObject;
		try {
			String i = String.valueOf(num);
			strObject = serialize(message);
			SharedPreferences sp = context.getSharedPreferences("Message", 0);  
		    Editor edit = sp.edit();  
		    edit.putString(i, strObject);  
		    edit.commit(); 
		    //       
	    	setSmsCount(num);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
       
    }  
    
    /**
     *       
     * @param num            
     */
    public void deleteMessage(int num) {
    	
    	int sum = getSmsCount();
    	if(sum == num){
    		setSmsCount(--sum);
    		return;
    	}
    	for(int i = num;i < sum;i++ ){
    		Message message = getMessage(i+1);
    		saveMessage(message, i);
    	}
    		
//    		int count = getSmsCount();
//    	    	setSmsCount(--count);
	}
  
    /**
     *       
     * @param num        
     * @return
     */
    public Message getMessage(int num) {  
        SharedPreferences sp = context.getSharedPreferences("Message", 0); 
        Message message;
        String i = String.valueOf(num);
		try {
			message = deSerialization(sp.getString(i, null));
			return message; 
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;

		}
        
        
    }  
    
    /**
     *          
     * @return
     */
    public List<Message> getAllMessage() {
		List<Message> messages = new ArrayList<Message>();
		for(int i = 1;i <= getSmsCount();i++){
			Message message = getMessage(i);
			messages.add(message);
		}
    	return messages;

	}
    
    /**
     *     ,               ,              
     * @param messageText     
     * @param num     
     */
    public void sendMessage(Message message){
    	SmsManager smsManager = SmsManager.getDefault();  
    	sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0);
    	deliverPI = PendingIntent.getBroadcast(context, 0, deliverIntent, 0);
    	regSendBroadcast();
    	regRecBroadcast();
    	List<String> divideContents = smsManager.divideMessage(message.getMessageText());    
    	for (String text : divideContents) {    
    	    smsManager.sendTextMessage(message.getNumber(), null, text, sentPI, deliverPI);    
    	} 
    	int count = getSmsCount();
    	//            
    	saveMessage(message, ++count);
    }
    
    
    /**
     *         ,          ,            
     */
    private void regSendBroadcast(){
    	 context.registerReceiver(new BroadcastReceiver() {  
    	        @Override  
    	        public void onReceive(Context _context, Intent _intent) {  
    	            switch (getResultCode()) {  
    	                  case Activity.RESULT_OK:  
    	                       Toast.makeText(context,  
    	                    "      ", Toast.LENGTH_SHORT)  
    	                    .show();  
    	            break;  
    	              case SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
    	            	  Toast.makeText(context,  
    	    	                    "      ", Toast.LENGTH_SHORT)  
    	    	                    .show();
    	            break;  
    	              case SmsManager.RESULT_ERROR_RADIO_OFF:  
    	            	  Toast.makeText(context,  
  	    	                    "      ", Toast.LENGTH_SHORT)  
  	    	                    .show();
    	            break;  
    	              case SmsManager.RESULT_ERROR_NULL_PDU: 
    	            	  Toast.makeText(context,  
  	    	                    "      ", Toast.LENGTH_SHORT)  
  	    	                    .show();
    	            break;  
    	            }  
    	        }  
    	    }, new IntentFilter(SENT_SMS_ACTION));  
    }
    
    /**
     *           ,                
     */
    private void regRecBroadcast(){
    	
    	context.registerReceiver(new BroadcastReceiver() {  
    	   @Override  
    	   public void onReceive(Context _context, Intent _intent) {  
    	       Toast.makeText(context,  
    	  "         ", Toast.LENGTH_SHORT)  
    	  .show();  
    	   }  
    	}, new IntentFilter(DELIVERED_SMS_ACTION));  
    }
    
    /**
     *         
     * @param count
     */
    private void setSmsCount(int count) {
    	SharedPreferences sp = context.getSharedPreferences("Message", 0);  
	    Editor edit = sp.edit();  
	    edit.putInt("smsCount", count);
	    edit.commit();  

    }
    
    /**
     *          
     * @return
     */
   public int getSmsCount() {
	   SharedPreferences sp = context.getSharedPreferences("Message", 0); 
	   int count = sp.getInt("smsCount", 0);
	   return count;
	}
   
   
   
}

대상의 서열화와 반서열화를 사용하여 하나의 메시지 대상을 String 대상으로 전환시켜SharePreference에 저장하고 키 값은 문자의 번호입니다.이 번호를 통해 지정된 문자메시지를 조회하거나 삭제할 수 있다.
이렇게 한 항목이 문자 조작이 필요하고 문자 메시지를 저장해야 할 때 이 작은 모듈을 사용할 수 있다. 단지 하나의 Message Utils 대상만 있으면 그의 public 방법을 호출하면 문자 조작을 편리하게 할 수 있고 대상을 대상으로 하는 고중합 저결합, 복용 가능한 디자인 원칙에 부합된다.

좋은 웹페이지 즐겨찾기