struct ifreq ifr; int fd; fd=socket(AF_INET,SOCK_DGRAM,0); strcpy(ifr.ifr_name,"eth0"); ifr.ifr_addr.sa_family=AF_INET; ioctl(fd,SIOCGIFHWADDR,&ifr); puts(ifr.ifr_hwaddr.sa_data);
要使用 Flash Professional CS5 开发 iPhone 应用程序,您必须使用 P12 证书文件。基于从 Apple 收到的 Apple iPhone 开发人员证书文件生成此证书。
从 Apple 下载 Apple iPhone 证书后,将其导出为 P12 证书格式。在 Mac® OS 上执行以下操作:
打开钥匙串访问应用程序(位于应用程序/实用工具文件夹中)。
如果尚未将该证书添加到钥匙串,请选择“文件”>“导入”。然后浏览到您从 Apple 获取的证书文件(.cer 文件)。
在钥匙串访问中选择密钥类别。
选择与 iPhone 开发证书相关联的私钥。
该私钥由 iPhone 开发人员识别:与之配对的<名字><姓氏>公共证书。
选择“文件”>“导出项目”。
以个人信息交换 (.p12) 文件格式保存您的密钥。
系统将提示您创建一个尝试在其他计算机上导入此密钥时需要使用的密码。
要使用 Flash CS5 开发 iPhone 应用程序,则必须使用 P12 证书文件。基于从 Apple 收到的 Apple iPhone 开发人员证书文件生成此证书。
将从 Apple 收到的开发人员证书文件转换成 PEM 证书文件。从 OpenSSL bin 目录运行以下命令行语句:
openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
如果您使用的是 Mac 计算机上钥匙串中的私钥,则将其转换成 PEM 密钥:
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
现在,您可以基于密钥和 PEM 版本的 iPhone 开发人员证书生成有效的 P12 文件:
openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12
如果您使用的是 Mac OS 钥匙串中的密钥,则使用上一步骤中生成的 PEM 版本。否则,请使用以前生成的 OpenSSL 密钥(位于 Windows 上)。
AutoCompleteTextView配合自定义的CursorAdapter(setAdapter()),可以帮助我们完成查找的功能.关键就在于类CursorAdapter.
CursorAdapter是继承自BaseAdapter并且实现了接口Filterable 。所以在我们自己定义的CursorAdapter子类中就不需要在继承Filterable,但对于JRE是1.5以下的虚拟机来说。是要重写方法getFilter()的;
要继承CursorAdapter类。必须实现的方法有:
1)首先执行的是public Cursor runQueryOnBackgroundThread(CharSequence constraint),constraint就是我们输入的要查询的关键字;此方法产生查询到的所有数据的cursor.并将其返回给下一个函数;
2)接下来执行方法public View newView(Context context, Cursor cursor, ViewGroup parent),cursor就是有第一种方法产生的.这个方法主要是产生一个个具体的承载cursor指向的数据的view类,最常见的是TextView;
3)接下来执行方法public void bindView(View view, Context context, Cursor cursor) 。view就是第2步产生的。cursor是第一步产生的。显而易见,就是将两者进行绑定。
但要注意的是,2和3是反复交替执行的。产生多少条数据(cursor.getcount())就执行多少轮。还有一点容易忽视的就是在xml文件中定义AutoCompleteTextView片段中一定要加入以下代码android:completionThreshold="1",他表示你最少要输入关键字的个数;
下面的代码以查询联系人为例:
package com.zymic.home; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.provider.Contacts; import android.provider.Contacts.People; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AutoCompleteTextView; import android.widget.CursorAdapter; import android.widget.Filterable; import android.widget.TextView; import android.widget.Toast; public class AutoTextViewEx extends Activity { private AutoCompleteTextView autoTextView; private Cursor cursor; // private static final String[] PEOPLE_PROJECTION = new String[] { Contacts.People._ID, Contacts.People.PRIMARY_PHONE_ID, Contacts.People.TYPE, Contacts.People.NUMBER, Contacts.People.LABEL, Contacts.People.NAME, }; // @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // autoTextView=(AutoCompleteTextView)findViewById(R.id.autotextview); cursor=getApplicationContext().getContentResolver().query(People.CONTENT_URI, PEOPLE_PROJECTION, null, null, null); MyAdapter adapter=new MyAdapter(this,cursor); autoTextView.setAdapter(adapter); } // public class MyAdapter extends CursorAdapter implements Filterable{ Cursor cursor; public MyAdapter(Context context, Cursor c) { super(context, c); // TODO Auto-generated constructor stub } @Override public void bindView(View view, Context context, Cursor cursor) { ((TextView)view).setText(cursor.getString(5)); Toast.makeText(getApplicationContext(), "bindView", Toast.LENGTH_SHORT).show(); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater)context.getSystemService ( Context.LAYOUT_INFLATER_SERVICE); TextView view=(TextView) inflater.inflate(android.R.layout.simple_dropdown_item_1line, null); //view.setText(cursor.getString(5)); Toast.makeText(getApplicationContext(), "newView", Toast.LENGTH_SHORT).show(); return view; } @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { //UPPER(Contacts.People.NAME) String where="UPPER("+Contacts.People.NAME+") GLOB ?"; String[]to=new String[]{"*"+constraint.toString().toUpperCase()+"*"}; cursor=getApplicationContext().getContentResolver().query(People.CONTENT_URI, PEOPLE_PROJECTION, where, to, null); //System.out.println(cursor); Toast.makeText(getApplicationContext(), "runQuery", Toast.LENGTH_SHORT).show(); return cursor; } } }