修改已安装android程序
2013-07-26 09:38:17 zhenye1986 阅读数 407

需要用到的权限

<uses-permission android:name="WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_TASKS"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


首先是判断是否有安装某个程序

原文地址:http://hh-blog.appspot.com/2011/01/13/Android-installed.html

public boolean checkApkExist(Context context, String packageName) {
     if (packageName == null || “”.equals(packageName))
         return false;
    
     try {
         ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName,PackageManager.GET_UNINSTALLED_PACKAGES);
         return true;
     } catch (NameNotFoundException e) {
         return false;
     }
 }

接下来是启动另外一个API程序

public static void RunActivity(String packetName, Context context)
	{
		try {
			PackageInfo pi = context.getPackageManager().getPackageInfo(packetName, 0);
			Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);  
	        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
	        resolveIntent.setPackage(pi.packageName);  
	           
	        List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(resolveIntent,0);
	        ResolveInfo ri = apps.iterator().next();
	        if (ri != null ) {  
	            String packageName1 = ri.activityInfo.packageName;  
	            String className = ri.activityInfo.name;  
	               
	            Intent intent = new Intent(Intent.ACTION_MAIN);  
	            intent.addCategory(Intent.CATEGORY_LAUNCHER);  
	               
	            ComponentName cn = new ComponentName(packageName1, className);  
	               
	            intent.setComponent(cn);  
	            context.startActivity(intent);  
	        }  
		} catch (NameNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
	}


2012-06-28 13:38:34 yangfeidehao 阅读数 335

我们在做android手机方案设计的时候,通常会碰到修改程序主题的问题。

以替换DeskClock的btn_in_call_round_disable为例

首先去你要替换图标的包里面查找图标文件,并记录清楚位置,好比drawable/btn_in_call_round_disable
反编译对应的包,到androidManifest.xml中间找包名 packageName="com.android.deskclock"
反编译主体包,
把你想要替换的图标放到主题包的res/drawable-hdpi下(假设文件名为btn_in_call_round_disable.png)
在主题包的\res\xml下新建com.android.deskclock.xml
编辑这个文件输入以下内容

<?xml version="1.0" encoding="utf-8"?>
<resource-redirections>
    <item name="drawable/btn_in_call_round_disable">@drawable/现在文件的名字可以任起</item>
</resource-redirections>
2013-12-20 14:48:38 wangjinke2011 阅读数 470

Android提供三种字体:“Sans”,“serif”和“monospace”。

1、在Android XML文件中设置字体

可以采用android:typeface,例如android:typeface=”monospace”。在这里例子中我们在Activity中对android:text=”Hello, World! 您好”分别进行了四种显示方式,依次为“Sans”,“serif”,“monospace”和系统缺省方式(经试验缺省采用采用sans)。英文字体有差异,貌似中文字体没有差异。XML文件如下:

 

<?xml version=”1.0″ encoding=”utf-8″?> 
<TableLayout … … android:stretchColumns = “1″>
<TableRow>
<TextView android:text=”sans:” 
android:layout_marginRight=”4px” 
android:textSize=”20sp” />
<TextView android:text=”Hello, World! 您好”
android:typeface =”sans” <!– android:typeface用于指定字体–> 
android:textSize=”20sp” />
</TableRow>
… …类同,依次设置两个TableRow,分别将sans 修改为serif,monospace … … 
<TableRow> 
<TextView android:text=”custom:” …. /> 
<TextView android:id=”@+id/c12_custom” 
android:text=”Hello, World! 您好” 
android:textSize=”20sp” /> 
</TableRow> 
</TableLayout>

2、使用其他字体 
1)将新字体的TTF文件copy到assets/fonts/目录下面,例如我们将“*.ttf”copy了过去。

2)我们需要将widget设置为该字体,比较遗憾的是,不能直接在XML文件中进行,需要编写源代码。

 

TextView tv = (TextView)findViewById(R.id.c12_custom);
//从assert中获取有资源,获得app的assert,采用getAserts(),通过给出在assert/下面的相对路径。在实际使用中,字体库可能存在于SD卡上,可以采用createFromFile()来替代createFromAsset。 
Typeface face = Typeface.createFromAsset (getAssets() , “fonts/timesi.ttf” );
tv.setTypeface (face);

我在模拟器中先后导入华文行楷的字体,大约4M,但是系统无法识别出该字体,没有显示,然后尝试使用英文字体timesi.ttf,正常。因此Android并非和所有的TTF字体都能兼容,尤其在中文特殊字体的支持会存在问题,对于不兼容的字体,Android不出报错,只是无法正常显示。一般而言我们都会使用系统缺省提供的字体。

对于华文行楷字体,我们一开始使用的文件是中文名字,出现报错,后来我们将之改为全小写的英文名称就不会出错,所以在文件命名上需要注意。

顺便给大家一个字体库,去下载吧。

3、一些注意

使用其他字库,都会消耗程序的空间,这是要非常注意的。而且这些字库有时并不能完全提供你所需要的文字。

举个例子,省略方式。当文字太多的时候,可以通过省略号省略后面的内容,省略号是使用“…”作为一个字体,可通过android:ellipsize属性进行设置。如果我们需要使用省略功能,需要确保字体具有省略号。此外,为了保证长度的一直,Android会进行填充处理,除了将一个字符更换为省略符合外,后面的字符将更换为一个特殊的Unicode字符,‘ZERO WIDTH NO-BREAK SPACE’ (U+FEFF)。这个字符并占用任何可视的位置,但是保障了string具有同样的长度。不是所有的字体都支持这个特殊的字符,可能会引发一些乱码现象。

Android是支持国际语言的,但是我们仍需要对custom的字体小心处理。

2015-05-06 12:13:00 weixin_34390996 阅读数 0

Android提供三种字体:“Sans”,“serif”和“monospace”。

1、在Android XML文件中设置字体

可以采用android:typeface,例如android:typeface=”monospace”。在这里例子中我们在Activity中对android:text=”Hello, World! 您好”分别进行了四种显示方式,依次为“Sans”,“serif”,“monospace”和系统缺省方式(经试验缺省采用采用sans)。英文字体有差异,貌似中文字体没有差异。XML文件如下:


<?xml version=”1.0″ encoding=”utf-8″?> 
<TableLayout … … android:stretchColumns = “1″>
<TableRow>
<TextView android:text=”sans:” 
android:layout_marginRight=”4px” 
android:textSize=”20sp” />
<TextView android:text=”Hello, World! 您好”
android:typeface =”sans” <!– android:typeface用于指定字体–> 
android:textSize=”20sp” />
</TableRow>
… …类同,依次设置两个TableRow,分别将sans 修改为serif,monospace … … 
<TableRow> 
<TextView android:text=”custom:” …. /> 
<TextView android:id=”@+id/c12_custom” 
android:text=”Hello, World! 您好” 
android:textSize=”20sp” /> 
</TableRow> 
</TableLayout>




2、使用其他字体

1)将新字体的TTF文件copy到assets/fonts/目录下面,例如我们将“*.ttf”copy了过去。

2)我们需要将widget设置为该字体,比较遗憾的是,不能直接在XML文件中进行,需要编写源代码。

TextView tv = (TextView)findViewById(R.id.c12_custom);
//从assert中获取有资源,获得app的assert,采用getAserts(),通过给出在assert/下面的相对路径。在实际使用中,字体库可能存在于SD卡上,可以采用createFromFile()来替代createFromAsset。 
Typeface face = Typeface.createFromAsset (getAssets() , “fonts/timesi.ttf” );
tv.setTypeface (face);



我在模拟器中先后导入华文行楷的字体,大约4M,但是系统无法识别出该字体,没有显示,然后尝试使用英文字体timesi.ttf,正常。因此Android并非和所有的TTF字体都能兼容,尤其在中文特殊字体的支持会存在问题,对于不兼容的字体,Android不出报错,只是无法正常显示。一般而言我们都会使用系统缺省提供的字体。

对于华文行楷字体,我们一开始使用的文件是中文名字,出现报错,后来我们将之改为全小写的英文名称就不会出错,所以在文件命名上需要注意。

顺便给大家一个字体库,去下载吧

3、一些注意

使用其他字库,都会消耗程序的空间,这是要非常注意的。而且这些字库有时并不能完全提供你所需要的文字。

举个例子,省略方式。当文字太多的时候,可以通过省略号省略后面的内容,省略号是使用“…”作为一个字体,可通过android:ellipsize属性进行设置。如果我们需要使用省略功能,需要确保字体具有省略号。此外,为了保证长度的一直,Android会进行填充处理,除了将一个字符更换为省略符合外,后面的字符将更换为一个特殊的Unicode字符,‘ZERO WIDTH NO-BREAK SPACE’ (U+FEFF)。这个字符并占用任何可视的位置,但是保障了string具有同样的长度。不是所有的字体都支持这个特殊的字符,可能会引发一些乱码现象。

Android是支持国际语言的,但是我们仍需要对custom的字体小心处理。

转载于:https://my.oschina.net/yaly/blog/411244

2012-12-11 15:50:36 chenzujie 阅读数 15827

今天搞了个小程序,可以修改你自己android手机的任何一条短信。

直接进入正题,先放两张效果图:




主界面就是四个按钮加一个显示短信的listview:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical"
    >
	<LinearLayout 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:orientation="horizontal"
	    >
	    <Button 
	        android:id="@+id/btnAll"
	        android:layout_weight="1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="所有短信"
	        />
	    <Button 
	        android:id="@+id/btnInbox"
	        android:layout_weight="1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="收件箱短信"
	        />
	</LinearLayout>
	<LinearLayout 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:orientation="horizontal"
	    >
	    <Button 
	        android:id="@+id/btnSend"
	        android:layout_weight="1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="发件箱短信"
	        />
	    <Button 
	        android:id="@+id/btnDraft"
	        android:layout_weight="1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="草稿箱短信"
	        />
	</LinearLayout>
    <ListView 
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        />

</LinearLayout>

还有一个StaticValues类放置一些常量

package com.jackchan.sms;

public class StaticValues {
	//android系统短信数据库的字段
	public static final String _ID = "_id";
	public static final String PERSON = "person";
	public static final String BODY = "body";
	public static final String ADDRESS = "address";
	public static final String DATE = "date";
	public static final String TYPE = "type";
}

主类代码如下,重点在getSmsInPhone()这个方法,通过ContentResolver分别传入收件箱、发件箱、草稿的Uri获取你想要的字段,

sms相关的字段如下:

_id               一个自增字段,从1开始 ,每条短信_id都不一样,根据这个唯一性可以修改短信
thread_id    序号,同一发信人的id相同 
address      发件人手机号码 
person        联系人列表里的序号,陌生人为null 
date            发件日期 
protocol      协议,分为: 0 SMS_RPOTO, 1 MMS_PROTO  
read           是否阅读 0未读, 1已读  
status         状态 -1接收,0 complete, 64 pending, 128 failed 
type 
    ALL    = 0; 
    INBOX  = 1; 
    SENT   = 2; 
    DRAFT  = 3; 
    OUTBOX = 4; 
    FAILED = 5; 
    QUEUED = 6;
 
body                     短信内容 
service_center     短信服务中心号码编号 
subject                  短信的主题 
reply_path_present     TP-Reply-Path 


package com.jackchan.sms;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.jackchan.sms.ChangeSMSWindow.onOkClick;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;

public class SMS extends Activity {
	
	private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); //已发送信息列表
	private SMSAdapter adapter;
	private Button btnAll;
	private Button btnInbox;
	private Button btnSend;
	private Button btnDraft;
	public static String url;
	private ListView listView;
	private final String SMS_URI_ALL   = "content://sms/";      
	private final String SMS_URI_INBOX = "content://sms/inbox";    
	private final String SMS_URI_SEND  = "content://sms/sent";    
	private final String SMS_URI_DRAFT = "content://sms/draft";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initComponet();
        setBtnClick();
        url = SMS_URI_ALL;//默认获取全部短信
        adapter = new SMSAdapter(this, getSmsInPhone());
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				ChangeSMSWindow change = new ChangeSMSWindow(SMS.this, list.get(arg2).get(StaticValues.BODY).toString(),
						(Long) list.get(arg2).get(StaticValues._ID));
				change.setOkClick(new onOkClick() {
					
					@Override
					public void dataChange() {
						listChange();
					}
				});
				change.showAtLocation(listView,
						//LayoutInflater.from(context).inflate(R.layout.main, null), 
						Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL, 
						0, 0);
			}
		
        });
    }

    private void initComponet(){
    	listView = (ListView)findViewById(R.id.listview);
        btnAll = (Button)findViewById(R.id.btnAll);
        btnInbox = (Button)findViewById(R.id.btnInbox);
        btnSend = (Button)findViewById(R.id.btnSend);
        btnDraft = (Button)findViewById(R.id.btnDraft);
    }
    
    private void setBtnClick(){
    	btnAll.setOnClickListener(click);
    	btnInbox.setOnClickListener(click);
    	btnSend.setOnClickListener(click);
    	btnDraft.setOnClickListener(click);
    }
    /*
     * listview数据发生改变
     */
    private void listChange(){
    	adapter.clearList();
		adapter.changeList(getSmsInPhone());
		adapter.notifyDataSetChanged();
    }
    private btnClick click = new btnClick();
    private class btnClick implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if(v == btnAll){
				url = SMS_URI_ALL;
			}
			else if(v == btnInbox){
				url = SMS_URI_INBOX;
			}
			else if(v == btnSend){
				url = SMS_URI_SEND;
			}
			else if(v == btnDraft){
				url = SMS_URI_DRAFT;
			}
			listChange();
		}
    	
    }
    /*
     * 获取指定类型短信
     */
    public List<Map<String, Object>> getSmsInPhone()    
    {    
        try{    
            ContentResolver cr = getContentResolver();    
            String[] projection = new String[]{"_id", "address", "person",     
                    "body", "date", "type"};    
            Uri uri = Uri.parse(url);    
            Cursor cur = cr.query(uri, projection, null, null, "date desc");    
       
            if (cur.moveToFirst()) {
            	long id;
                String name;     
                String phoneNumber;           
                String smsbody;    
                String date;    
                String type;    
                
                int idColumn = cur.getColumnIndex(StaticValues._ID);
                int nameColumn = cur.getColumnIndex(StaticValues.PERSON);    
                int phoneNumberColumn = cur.getColumnIndex(StaticValues.ADDRESS);    
                int smsbodyColumn = cur.getColumnIndex(StaticValues.BODY);    
                int dateColumn = cur.getColumnIndex(StaticValues.DATE);    
                int typeColumn = cur.getColumnIndex(StaticValues.TYPE);    
                 
                do{ 
                	id = cur.getLong(idColumn);
                    name = cur.getString(nameColumn);                 
                    phoneNumber = cur.getString(phoneNumberColumn);    
                    smsbody = cur.getString(smsbodyColumn);    
                        
                    SimpleDateFormat dateFormat = new SimpleDateFormat(    
                            "yyyy-MM-dd hh:mm:ss");    
                    Date d = new Date(Long.parseLong(cur.getString(dateColumn)));    
                    date = dateFormat.format(d);    
                        
                    int typeId = cur.getInt(typeColumn);    
                    if(typeId == 1){    
                        type = "接收";    
                    } else if(typeId == 2){    
                        type = "发送";    
                    }else if(typeId == 3){    
                        type = "草稿";    
                    } else {    
                        type = "";    
                    }
                    if(smsbody == null) 
                    	smsbody = "";
                    Map<String, Object> map = new HashMap<String, Object>();
                    map.put(StaticValues._ID, id);
                    map.put(StaticValues.PERSON, name);
                    map.put(StaticValues.ADDRESS, phoneNumber);
                    map.put(StaticValues.BODY, smsbody);
                    map.put(StaticValues.DATE, date);
                    map.put(StaticValues.TYPE, type);
                    list.add(map);
                }while(cur.moveToNext());  
                cur.close();
            }   
        } catch(SQLiteException ex) {    
            Log.d("SQLiteException in getSmsInPhone", ex.getMessage());    
        }    
        return list;    
    }   
}

listview中item.xml的布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/person"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名:"
        />
	<TextView 
        android:id="@+id/address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="地址:"
        />
	<TextView 
        android:id="@+id/body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="内容:"
        />
	<TextView 
        android:id="@+id/date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="日期:"
        />
	<TextView 
        android:id="@+id/type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="类型:"
        />
</LinearLayout>


然后还有一个类用来适配主界面的listview

package com.jackchan.sms;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SMSAdapter extends BaseAdapter{
	
	private Context context;//当前上下文内容
	private List<Map<String, Object>> list; //已发送信息列表
	private class ViewHolder{ 
		TextView person;
		TextView address;
		TextView body;
		TextView date;
		TextView type;
	}
	
	public SMSAdapter(Context context, List<Map<String, Object>> list) {
		super();
		this.context = context;
		this.list = list;
	}
	
	public void changeList(List<Map<String, Object>> list){
		this.list = list;
	}
	
	public void clearList(){
		list.clear();
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder = null;
		if(convertView == null){
			viewHolder = new ViewHolder();
			convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
			viewHolder.person = (TextView)convertView.findViewById(R.id.person);
			viewHolder.address = (TextView)convertView.findViewById(R.id.address);
			viewHolder.body = (TextView)convertView.findViewById(R.id.body);
			viewHolder.date = (TextView)convertView.findViewById(R.id.date);
			viewHolder.type = (TextView)convertView.findViewById(R.id.type);
			convertView.setTag(viewHolder);
		}
		else{
			viewHolder = (ViewHolder)convertView.getTag();
		}
		//获取短信基本信息
		viewHolder.person.setText("姓名:" + list.get(position).get(StaticValues.PERSON));
		viewHolder.address.setText("号码:" + list.get(position).get(StaticValues.ADDRESS));
		viewHolder.body.setText("内容:" + list.get(position).get(StaticValues.BODY));
		viewHolder.date.setText("日期:" + list.get(position).get(StaticValues.DATE));
		viewHolder.type.setText("类型:" + list.get(position).get(StaticValues.TYPE));
		return convertView;
	}
}


修改信息在一个弹出的popupwindow里实现,弹出窗口的布局文件dialog.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_popupwindow"
    android:orientation="vertical" >
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="输入修改后的内容:"
        android:textColor="#000000"
        android:textSize="20sp"
        />
	<EditText
	    android:id="@+id/edittext"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:selectAllOnFocus="true"
	    />
	<LinearLayout 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:orientation="horizontal"
	    >
	    <Button
	        android:id="@+id/btnOk"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_weight="1"
	        android:text="确认"
	        />
	    <Button
	        android:id="@+id/btnCancel"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_weight="1"
	        android:text="取消"
	        />
	</LinearLayout>
</LinearLayout>

弹出界面背景bg_popupwindow.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle"
  ><!-- android:shape="" 表示是圆角矩形还是椭圆等等 -->
  	<solid  android:color="#FFFF00"/>
  	<!-- 四个角的弧度 -->
  	<corners android:radius="4dip"/>
  	<!-- padding 表示内部空间距离背景图片内部边距 的距离 -->
</shape>

弹出界面实现代码

package com.jackchan.sms;


import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
/*
 * 修改短信内容弹出框
 * @author:jack chan
 */
public class ChangeSMSWindow extends PopupWindow{
	
	private Context context;
	private EditText editText;
	private Button btnOk;
	private Button btnCancel;
	private ContentValues cv = new ContentValues(); //存放修改信息
	private String body = null;//短信内容
	private long id = -1;//短信编号
	
	public ChangeSMSWindow(Context context, String body, long id) {
		super(context);
		this.context = context;
		this.body = body;
		this.id = id;
		LayoutInflater inflater = LayoutInflater.from(context);
		View view = inflater.inflate(R.layout.dialog, null);
		setContentView(view);
		this.setFocusable(true);
		this.setOutsideTouchable(true);
		editText = (EditText)view.findViewById(R.id.edittext);
		btnOk = (Button)view.findViewById(R.id.btnOk);
		btnCancel = (Button)view.findViewById(R.id.btnCancel);
		this.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
		this.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
		editText.setText(body);
		btnClick click = new btnClick();
		btnOk.setOnClickListener(click);
		btnCancel.setOnClickListener(click);
	}
	
	private class btnClick implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if(v.getId() == R.id.btnOk){
				cv.put(StaticValues.BODY, editText.getText().toString());
				context.getContentResolver().update(Uri.parse(SMS.url), 
						cv, StaticValues._ID + "=?", new String[]{id+""});
				if(okClick != null)
					okClick.dataChange();
			}
			if(isShowing())
				dismiss();
		}
		
	}
	
	public interface onOkClick{
		void dataChange();
	}
	
	private onOkClick okClick;


	public void setOkClick(onOkClick okClick) {
		this.okClick = okClick;
	}
}

最后在Mainfiest里添加读写权限

<uses-permission android:name="android.permission.READ_SMS" />
	<uses-permission android:name="android.permission.WRITE_SMS" />

大功告成,现在就完成需求了。



没有更多推荐了,返回首页