在Android中连接无线网络,输入密码后,“连接”按钮为灰色,不能使用。
原因:
1、你使用的无线路由器的密码小于8位,android系统中当无线密码不足8位时候,连接按钮不能使用,解决办法:更改路由器的密码为大于等于8位的。
在Android中连接无线网络,输入密码后,“连接”按钮为灰色,不能使用。
原因:
1、你使用的无线路由器的密码小于8位,android系统中当无线密码不足8位时候,连接按钮不能使用,解决办法:更改路由器的密码为大于等于8位的。
本例主要是使用了Intent对象的隐式调用方式,设置intent的Action, Data和Extra来传递的相关的信息
activity布局代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <EditText android:id="@+id/txtReceiver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/textView1" android:ems="10" android:inputType="textEmailAddress" android:text="yourmail@svn1.bcoder.com" /> <EditText android:id="@+id/txtEmailContent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/txtReceiver" android:ems="10" android:gravity="top" android:inputType="textMultiLine" android:lines="10" android:text="Here is the bodytext!" /> <Button android:id="@+id/button1" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@+id/txtEmailContent" android:layout_marginRight="31dp" android:layout_marginTop="16dp" android:onClick="callEmailApp" android:text="Call" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtReceiver" android:layout_alignBottom="@+id/txtReceiver" android:layout_alignParentLeft="true" android:text="Receiver:" android:textAppearance="?android:attr/textAppearanceMedium" /> </RelativeLayout> |
类代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com.bcoder.callmailapp; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.support.v4.app.NavUtils; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void callEmailApp(View view){ EditText txtReceiver = (EditText)findViewById(R.id.txtReceiver); EditText txtContent = (EditText)findViewById(R.id.txtEmailContent); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:" + txtReceiver.getText().toString())); intent.putExtra(Intent.EXTRA_SUBJECT, "Welcome to bcoder.com"); intent.putExtra(Intent.EXTRA_BCC, "bcc@svn1.bcoder.com"); intent.putExtra(Intent.EXTRA_CC, "cc@svn1.bcoder.com"); intent.putExtra(Intent.EXTRA_TEXT, txtContent.getText().toString()); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"coder1@svn1.bcoder.com", "coder2@svn1.bcoder.com"}); startActivity(intent); } } |
本代码调试环境:
* Eclipse: Indigo Service Release 2
* Android SDK: 4.0(API LEVEL 14)
注意:
1. 如果你还没有在你的手机或者AVD上创建相关的email帐户,运行此程序时会提示Unsupported action(不支持的Action)!
1、为什么要使用service?
在我们开发的应用中,有的时候需要做一些长期运行的任务,比如下载文件、音乐播放器、闹钟或者邮件程序等。由于Android系统会根据系统资源使用情况自动清理闲置的后台程序,所以普通的Activity程序在运行一段时间后就有可能被系统清理掉,不能达到长期运行的效果。而包含service的进程属于优先权比较高的(关于进程的生命周期相关知识请点击这里查看)不容易被系统清理掉,所以对那些应用来说,选择service是必要的。
2、创建一个Service
在工程节点或者包节点上右键,选择”New->Class”,输入包名,类名称,SuperClass输入或者选择android.app.Service,点击ok,创建一个服务类成功,创建完成后初始化代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import android.app.Service; import android.content.Intent; import android.os.IBinder; public class TestService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } } |
创建完成后还无法使用此服务,需要在AndroidManifestXml中声明该服务类,示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="TestService" android:label="@string/app_name" android:icon="@drawable/ic_launcher"></service> </application> |
3、服务类的一些重要方法
getApplication()
Return the application that owns this service.
|
onBind(Intent intent)
Return the communication channel to the service.
|
onConfigurationChanged(Configuration newConfig)
Called by the system when the device configuration changes while your component is running.
|
onCreate()
Called by the system when the service is first created.
|
onDestroy()
Called by the system to notify a Service that it is no longer used and is being removed.
|
onLowMemory()
This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.
|
onRebind(Intent intent)
Called when new clients have connected to the service, after it had previously been notified that all had disconnected in its
onUnbind(Intent) . |
onStart(Intent intent, int startId)
This method was deprecated in API level 5. Implement
onStartCommand(Intent, int, int) instead. |
onStartCommand(Intent intent, int flags, int startId)
Called by the system every time a client explicitly starts the service by calling
startService(Intent) , providing the arguments it supplied and a unique integer token representing the start request. |
onTaskRemoved(Intent rootIntent)
This is called if the service is currently running and the user has removed a task that comes from the service’s application.
|
onTrimMemory(int level)
Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.
|
onUnbind(Intent intent)
Called when all clients have disconnected from a particular interface published by the service.
|
startForeground(int id, Notification notification)
Make this service run in the foreground, supplying the ongoing notification to be shown to the user while in this state.
|
stopForeground(boolean removeNotification)
Remove this service from foreground state, allowing it to be killed if more memory is needed.
|
stopSelf()
Stop the service, if it was previously started.
|
stopSelf(int startId)
Old version of
stopSelfResult(int) that doesn’t return a result. |
stopSelfResult(int startId)
Stop the service if the most recent time it was started was startId.
|
4、Service的调用方法
Service可能通过两种方法启动,一种是通过startService另外一种是通过bindService
1) startServie的声明如下:public abstract ComponentName startService (Intent service)
参数说明:service是你要启动的服务对象,通过Intent构造,你可以在Intent对象中加入其他需要的参数,以在服务中使用。执行此函数后,如果服务未启动则系统会创建此服务并执行,如果执行此函数时服务已经在运行,则服务会继续执行。
1 2 3 |
Intent servicentent = new Intent(this, CloudNoteService.class); //servicentent.putExtra("MusicFile", "") this.startService(servicentent); |
每次调用startService时都会触发服务内的android.app.Service.onStartCommand方法,此机制提供一个方便的方法通过Intent参数传入一些需要的参数,以避免必须再使用BindService才能实现的功能。
终止由startService启动的服务方法:一种是可以在服务内部调用stopSelf()来停止服务,另一种是在调用startService的context中通过调用stopService来终止
2) bindService声明如下:public abstract boolean bindService (Intent service, ServiceConnection conn, int flags)
参数说明:
service: 是要绑定的服务的实例标识,
conn: 用于接收成功绑定或者结束绑定时的通知,在连接时可以接收service返回的对象,
flags: 为绑定选项,可能为0, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_NOT_FOREGROUND, BIND_ABOVE_CLIENT, BIND_ALLOW_OOM_MANAGEMENT, BIND_WAIVE_PRIORITY.
对于由startService启动的服务,也可以使用此函数进行绑定。如果服务没有启动,可以设置flags为BIND_AUTO_CREATE,这样执行此函数时服务会被自动创建。
只有当调用该服务存在的时候系统才认为该服务有必须继续执行代码,比如当调用该服务的Activity停止或者销毁后它绑定的服务也会停止工作。所以在执行长期操作的时候不要在bindService中执行,即不要在Service的onbind函数中启动相应的定时器,否则当activity结束后,该定时器也会不再执行工作,而应该先用startService启动服务,并在服务的onStartCommand中执行定时器操作。
注意:
1、在使用一个service前必须在AndroidManifest.xml中定义该服务类名称,如:<service android:name=”Em8CheckerService”></service>
Use windows api to download file in delphi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, WinInet, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function DownloadToString(const Url: string): string; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of Char; BytesRead: dWord; begin Result := ''; NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if Assigned(NetHandle) then begin UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0); if Assigned(UrlHandle) then { UrlHandle valid? Proceed with download } begin FillChar(Buffer, SizeOf(Buffer), 0); repeat Result := Result + Buffer; FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end else { UrlHandle is not valid. Raise an exception. } raise Exception.CreateFmt('Cannot open URL %s', [Url]); InternetCloseHandle(NetHandle); end else { NetHandle is not valid. Raise an exception } raise Exception.Create('Unable to initialize Wininet'); end; function DownloadToFile(const Url, LFile: string): Boolean; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of Char; BytesRead: dWord; LFileStream: TFileStream; begin Result := False; NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if Assigned(NetHandle) then begin UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0); if Assigned(UrlHandle) then { UrlHandle valid? Proceed with download } begin LFileStream := TFileStream.Create(LFile, fmCreate); FillChar(Buffer, SizeOf(Buffer), 0); repeat // Result := Result + Buffer; FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); LFileStream.Write(Buffer, BytesRead); until BytesRead = 0; LFileStream.Free; InternetCloseHandle(UrlHandle); end else { UrlHandle is not valid. Raise an exception. } raise Exception.CreateFmt('Cannot open URL %s', [Url]); InternetCloseHandle(NetHandle); end else { NetHandle is not valid. Raise an exception } raise Exception.Create('Unable to initialize Wininet'); end; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := DownloadToString('http://www.mailsextractor.com/') end; procedure TForm1.Button2Click(Sender: TObject); begin DownloadToFile('http://www.mailsextractor.com/mailsextractor.exe', 'mailsextractor.exe'); end; end. |
above is the code
今天在虚拟机中使用CVS CheckOut的时候出现了”Unable to
load MSVCP711.dll (0x0000007e). Check application installation”.的错误,后来在网上查了查,可能是缺少msvcp71.dll的原因,下载了一个msvcp71.dll到X:Program FilesCommon FilesMarch Hare Software Ltd目录后,问题就解决了。
1. 当前系统日期、时间
select getdate()
2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
select dateadd(day,2,’2004-10-15′) –返回:2004-10-17 00:00:00.000
3. datediff 返回跨两个指定日期的日期和时间边界数。
select datediff(day,’2004-09-01′,’2004-09-18′) –返回:17
4. datepart 返回代表指定日期的指定日期部分的整数。
SELECT DATEPART(month, ‘2004-10-15’) –返回 10
5. datename 返回代表指定日期的指定日期部分的字符串
SELECT datename(weekday, ‘2004-10-15′) –返回:星期五
6. day(), month(),year() –可以与datepart对照一下
select 当前日期=convert(varchar(10),getdate(),120)
,当前时间=convert(varchar(8),getdate(),114)
select datename(dw,’2004-10-15′)
select 本年第多少周=datename(week,’2004-10-15′)
,今天是周几=datename(weekday,’2004-10-15’)
函数 参数/功能
GetDate( ) 返回系统目前的日期与时间
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1砍?
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称
参数 interval的设定值如下:
值 缩 写(Sql Server) (Access 和 ASP) 说明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m 月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd d 日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh h 时0 ~ 23
Minute Mi n 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms – 毫秒 0 ~ 999
access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似
举例:
1.GetDate() 用于sql server :select GetDate()
2.DateDiff(‘s’,’2005-07-20′,’2005-7-25 22:56:32′)返回值为 514592 秒
DateDiff(‘d’,’2005-07-20′,’2005-7-25 22:56:32′)返回值为 5 天
3.DatePart(‘w’,’2005-7-25 22:56:32′)返回值为 2 即星期一(周日为1,周六为7)
DatePart(‘d’,’2005-7-25 22:56:32′)返回值为 25即25号
DatePart(‘y’,’2005-7-25 22:56:32′)返回值为 206即这一年中第206天
DatePart(‘yyyy’,’2005-7-25 22:56:32′)返回值为 2005即2005年
DatePart(Hh, ‘2005-7-25 22:56:32’)返回值为22
DatePart(Mi, ‘2005-7-25 22:56:32’)返回值为56
Bellow is several different styles to show data in listview, you can use it to select your desired style.
Just show it very simply, if you have suggestions, please contact us.
Soure code file have been attached.
1. App crashes when it starts, because I make a error to set TextView.textcolor to a String resource Value, it should be a drawable resource value
1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="mainbtnlogin">Login</string> <drawable name="general_back_color">#FFFFFF</drawable> //this is right to assign to a color type variable <string name="general_text_color">#000000</string> //this is wrong to assign to a color type variable <drawable name="general_linkable_color">#0000FF</drawable> <string name="value_zero">0</string> </resources> |
2. I wrote a function which used Context of the activity. But when I finished coding, eclipse gave an error message. After a about 1 hour research, I finally found I wrote the function in the subclass of the activity. After moving the function to the main class, it works.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package em8.admin; //import a lot of packages public class Em8MainActivity extends Activity { /** Called when the activity is first created. */ @SuppressLint({ "ParserError", "NewApi" }) @Override public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); ... } public class ShowStatisticsTask extends AsyncTask<String, integer, Long>{ LogResItem lrItem = null; SharedPreferences prefs = getSharedPreferences(ConstData.Settings_file_name, MODE_PRIVATE); @Override protected Long doInBackground(String... params) { } protected void onPostExecute(Long result) { } //It is difficult to find, right? public void showNotification(int icon,String tickertext,String title,String content){ Notification notification=new Notification(icon,tickertext,System.currentTimeMillis()); notification.defaults=Notification.DEFAULT_ALL; PendingIntent pt=PendingIntent.getActivity(this, 0, getIntent(), 0); notification.setLatestEventInfo(this,title,content,pt); notifyMgr.notify(notification_id, notification); } } } |
3. (be continued…)
When I gave a margin value 10 to TextView, the eclipse give a below error message.
error: Error: Integer types not allowed (at ‘layout_margin’ with value ’10’).
I searched on internet, and found can’t give a integer value to it, should use 10dip.
StrictMode is a developer tool which used to detect accident in program. For example, if you do internet access or local file operation in the UI directly, the strictmode mechanism will throw an error to the application.
StrictMode is used default since Android 3.0(HoneyComb).
example of a wrong case
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public void downloadHtml(View view) throws IOException{ String response = ""; DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://svn1.bcoder.com"); HttpResponse execute = client.execute(httpGet); InputStream content = execute.getEntity().getContent(); BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); String s = ""; while ((s = buffer.readLine()) != null) { response += s; } TextView tv = (TextView)findViewById(R.id.textView1); tv.setText(response); } |
If you request an url like above, your app will crashes.
So the right thing we do this is we can run the internet request in thread(Threads, AsyncTask, Handler), I give a simple by AsyncTask.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
public void downloadHtml(View view) throws IOException{ DownloadHtmlTask task = new DownloadHtmlTask(); task.execute(new String[] { "http://svn1.bcoder.com" }); } private class DownloadHtmlTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String response = ""; InputStream in = null; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { URL urlget = new URL(url); HttpURLConnection conn = (HttpURLConnection)urlget.openConnection(); conn.connect(); in = (conn.getInputStream()); BufferedReader buffer = new BufferedReader(new InputStreamReader(in)); String s = ""; while ((s = buffer.readLine()) != null) { response += s; } } catch (Exception e) { e.printStackTrace(); } } return response; } @Override protected void onPostExecute(String result) { TextView textView = (TextView)findViewById(R.id.textView1);; textView.setText(result); } } |
It looks very troublesome when we just debug the program, so we can also use a simple code to disable ThreadPolicy to avoid errors.
1 2 3 4 5 6 7 |
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } |
…