当前位置: 编程技术>移动开发
本页文章导读:
▪chmod 的下令 chmod 的命令
指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉.........
▪ google 地图 的移植过程 google map 的移植过程
一、相关文件及所在目录:/system/app/Maps.apk/system/etc/permissions/com.google.android.gtalkservice.xml/system/etc/permissions/com.google.android.maps.xml/system/framework/com.google.android.gtalkservice.ja.........
▪ 重写dialog,CursorAdapter兑现带多选的ListView 重写dialog,CursorAdapter实现带多选的ListView
public class ContactDialog2 extends Dialog { private Context mContext; private Cursor mCursor; private final Map<Integer, CheckBox> checkBoxs = new HashMap<Integer, CheckBox>();; private.........
[1]chmod 的下令
来源: 互联网 发布时间: 2014-02-18
chmod 的命令
指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
参数 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限
指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
参数 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限
[2] google 地图 的移植过程
来源: 互联网 发布时间: 2014-02-18
google map 的移植过程
一、相关文件及所在目录:
/system/app/Maps.apk
/system/etc/permissions/com.google.android.gtalkservice.xml
/system/etc/permissions/com.google.android.maps.xml
/system/framework/com.google.android.gtalkservice.jar
/system/framework/com.google.android.maps.jar
/system/framework/base/core/res/res/drawable/blank_tile.png
/system/framework/base/core/res/res/drawable/loading_tile.png
/system/framework/base/core/res/res/drawable/no_tile_128.png
二、取得文件方法:
使用 android sdk 1.5 开起带有google API 的 emulator 模擬器,運行ddms,移出相应的文件
三、安装方法:
先把三个 png 文件 放到原码相應的目录中进行編譯
然后在把 jar和xml 文件放到生成后的目录下使用生成img 文件的工具 生成 system.img 文件
最后将 system.img 文件拷貝到模擬器中 運行即可
一、相关文件及所在目录:
/system/app/Maps.apk
/system/etc/permissions/com.google.android.gtalkservice.xml
/system/etc/permissions/com.google.android.maps.xml
/system/framework/com.google.android.gtalkservice.jar
/system/framework/com.google.android.maps.jar
/system/framework/base/core/res/res/drawable/blank_tile.png
/system/framework/base/core/res/res/drawable/loading_tile.png
/system/framework/base/core/res/res/drawable/no_tile_128.png
二、取得文件方法:
使用 android sdk 1.5 开起带有google API 的 emulator 模擬器,運行ddms,移出相应的文件
三、安装方法:
先把三个 png 文件 放到原码相應的目录中进行編譯
然后在把 jar和xml 文件放到生成后的目录下使用生成img 文件的工具 生成 system.img 文件
最后将 system.img 文件拷貝到模擬器中 運行即可
[3] 重写dialog,CursorAdapter兑现带多选的ListView
来源: 互联网 发布时间: 2014-02-18
重写dialog,CursorAdapter实现带多选的ListView
public class ContactDialog2 extends Dialog {
private Context mContext;
private Cursor mCursor;
private final Map<Integer, CheckBox> checkBoxs = new HashMap<Integer, CheckBox>();;
private final LayoutInflater mInflater; //用于实例化一个layout对象
private ContactAdapter mContactAdapter;
private int dataCount;
private boolean[] checks;
public ContactDialog2(Context context, int theme) {
super(context, theme);
mContext = context;
mInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
init();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = mInflater.inflate(R.layout.contact_dialog, null);
ListView mListView = (ListView) view.findViewById(R.id.mListView);
mListView.setAdapter(mContactAdapter);
Button allButton = (Button) view.findViewById(R.id.all_button);
allButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int size = checkBoxs.size();
StringBuilder sb = new StringBuilder() ;
for (int i = 0; i < dataCount; i++) {
CheckBox checkBox = checkBoxs.get(i) ;
if (i < size) {
checkBox.setChecked(true);
sb.append(checkBox.getText()).append(", ") ;
}
if (i >= size) {
checks[i] = true;
mCursor.moveToPosition(i) ;
sb.append(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))).append(", ") ;
}
}
Log.i("DDDDDDD", sb.toString()) ;
}
});
Button invertButton = (Button) view.findViewById(R.id.invert_button);
invertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int size = checkBoxs.size();
StringBuilder sb = new StringBuilder() ;
for (int i = 0; i < dataCount; i++) {
if (i < size) {
CheckBox checkBox = checkBoxs.get(i);
if (checkBox.isChecked()) {
checkBox.setChecked(false);
} else {
checkBox.setChecked(true);
sb.append(checkBox.getText()).append(", ") ;
}
}
if (i >= size) {
if (checks[i] == false) {
checks[i] = true;
mCursor.moveToPosition(i) ;
sb.append(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))).append(", ") ;
} else {
checks[i] = false;
}
}
}
if (sb.toString() == "") {
Log.i("fanxuan", "null") ;
}
Log.i("fanxuan", sb.toString()) ;
}
});
Button closeButton = (Button) view.findViewById(R.id.close_button);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// unregisterReceiver(checksReceiver) ;
ContactDialog2.this.dismiss();
}
});
setContentView(view);
}
private void getContacts() {
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
+ "1" + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
mCursor = mContext.getContentResolver().query(uri, projection,
selection, selectionArgs, sortOrder);
}
@Override
public void dismiss() {
mCursor.close();
super.dismiss();
}
private void init() {
getContacts();
dataCount = mCursor.getCount();
mContactAdapter = new ContactAdapter(mContext, mCursor);
checks = new boolean[dataCount];
for (int i = 0; i < checks.length; i++) {
checks[i] = false;
}
}
//继承cursorAdapter并重写其中的方法
private class ContactAdapter extends CursorAdapter {
public ContactAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//得到视图中checkBox对象
CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.checkBox);
int position = cursor.getPosition();
String aString = String.valueOf(position);
Log.i("bindView",aString);
//对checkBox对象属性赋值
if (!checkBoxs.containsKey(position)) {
mCheckBox.setText(cursor.getString(cursor
.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
mCheckBox.setChecked(checks[position]);
} else {
mCheckBox.setText(checkBoxs.get(position).getText());
mCheckBox.setChecked(checkBoxs.get(position).isChecked());
checkBoxs.remove(position);
}
checkBoxs.put(position, mCheckBox);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = mInflater.inflate(R.layout.contact_entry, parent,
false);//找到contact_entry.xml的视图,并把他赋给View
return view;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = newView(mContext, mCursor, parent);
mCursor.moveToPosition(position);
bindView(v, mContext, mCursor);
return v;
}
}
}
public class ContactDialog2 extends Dialog {
private Context mContext;
private Cursor mCursor;
private final Map<Integer, CheckBox> checkBoxs = new HashMap<Integer, CheckBox>();;
private final LayoutInflater mInflater; //用于实例化一个layout对象
private ContactAdapter mContactAdapter;
private int dataCount;
private boolean[] checks;
public ContactDialog2(Context context, int theme) {
super(context, theme);
mContext = context;
mInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
init();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = mInflater.inflate(R.layout.contact_dialog, null);
ListView mListView = (ListView) view.findViewById(R.id.mListView);
mListView.setAdapter(mContactAdapter);
Button allButton = (Button) view.findViewById(R.id.all_button);
allButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int size = checkBoxs.size();
StringBuilder sb = new StringBuilder() ;
for (int i = 0; i < dataCount; i++) {
CheckBox checkBox = checkBoxs.get(i) ;
if (i < size) {
checkBox.setChecked(true);
sb.append(checkBox.getText()).append(", ") ;
}
if (i >= size) {
checks[i] = true;
mCursor.moveToPosition(i) ;
sb.append(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))).append(", ") ;
}
}
Log.i("DDDDDDD", sb.toString()) ;
}
});
Button invertButton = (Button) view.findViewById(R.id.invert_button);
invertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int size = checkBoxs.size();
StringBuilder sb = new StringBuilder() ;
for (int i = 0; i < dataCount; i++) {
if (i < size) {
CheckBox checkBox = checkBoxs.get(i);
if (checkBox.isChecked()) {
checkBox.setChecked(false);
} else {
checkBox.setChecked(true);
sb.append(checkBox.getText()).append(", ") ;
}
}
if (i >= size) {
if (checks[i] == false) {
checks[i] = true;
mCursor.moveToPosition(i) ;
sb.append(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))).append(", ") ;
} else {
checks[i] = false;
}
}
}
if (sb.toString() == "") {
Log.i("fanxuan", "null") ;
}
Log.i("fanxuan", sb.toString()) ;
}
});
Button closeButton = (Button) view.findViewById(R.id.close_button);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// unregisterReceiver(checksReceiver) ;
ContactDialog2.this.dismiss();
}
});
setContentView(view);
}
private void getContacts() {
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
+ "1" + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
mCursor = mContext.getContentResolver().query(uri, projection,
selection, selectionArgs, sortOrder);
}
@Override
public void dismiss() {
mCursor.close();
super.dismiss();
}
private void init() {
getContacts();
dataCount = mCursor.getCount();
mContactAdapter = new ContactAdapter(mContext, mCursor);
checks = new boolean[dataCount];
for (int i = 0; i < checks.length; i++) {
checks[i] = false;
}
}
//继承cursorAdapter并重写其中的方法
private class ContactAdapter extends CursorAdapter {
public ContactAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//得到视图中checkBox对象
CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.checkBox);
int position = cursor.getPosition();
String aString = String.valueOf(position);
Log.i("bindView",aString);
//对checkBox对象属性赋值
if (!checkBoxs.containsKey(position)) {
mCheckBox.setText(cursor.getString(cursor
.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
mCheckBox.setChecked(checks[position]);
} else {
mCheckBox.setText(checkBoxs.get(position).getText());
mCheckBox.setChecked(checkBoxs.get(position).isChecked());
checkBoxs.remove(position);
}
checkBoxs.put(position, mCheckBox);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = mInflater.inflate(R.layout.contact_entry, parent,
false);//找到contact_entry.xml的视图,并把他赋给View
return view;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = newView(mContext, mCursor, parent);
mCursor.moveToPosition(position);
bindView(v, mContext, mCursor);
return v;
}
}
}
1 楼
KEIJIjava
2010-11-25
请加上 xml 文件 以便执行动作检验
最新技术文章: