2010年6月27日 星期日

Android學習筆記 - 通知(Notification)

1. 一般在使用通知的時候,是不需要額外的權限。但此範例設定在通知的時候需發出預設的通知震動,因此需在AndroidManifest.xml允許存取android.permission.VIBRATE這個權限。

2.NotificationExample.java
package tw.nicky;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class NotificationExample extends Activity {
    private Button notifyButn;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        notifyButn = (Button)findViewById(R.id.notifyButn);
        notifyButn.setOnClickListener(new View.OnClickListener() {
           
            @Override
            public void onClick(View v) {
                //取得Notification服務
                NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
                //設定當按下這個通知之後要執行的activity
                Intent notifyIntent = new Intent(NotificationExample.this,NotificationExample.class); 
                notifyIntent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK);
                PendingIntent appIntent=PendingIntent.getActivity(NotificationExample.this,0,
                                                                  notifyIntent,0);
                Notification notification = new Notification();
                //設定出現在狀態列的圖示
                notification.icon=R.drawable.icon;
                //顯示在狀態列的文字
                notification.tickerText="notification on status bar.";
                //會有通知預設的鈴聲、振動、light
                notification.defaults=Notification.DEFAULT_ALL;
                //設定通知的標題、內容
                notification.setLatestEventInfo(NotificationExample.this,"Title","content",appIntent);
                //送出Notification
                notificationManager.notify(0,notification);
               
            }
        });
    }
}
3. main.xml(Layout)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<Button
    android:text="Notify"
    android:id="@+id/notifyButn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</Button>
</LinearLayout>

4. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="tw.nicky"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".NotificationExample"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.VIBRATE" />
</manifest>


5. 執行畫面


2010年6月22日 星期二

Android學習筆記 - 發送SMS訊息

1. 若需使用發送SMS的服務,需在AndroidManifest.xml允許存取android.permission.SEND_SMS這個權限。

2.SendSMSExample.java
package tw.nicky.SendSMSExample;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class SendSMSExample extends Activity {
 private EditText phoneNumEditText;
 private EditText msgEditText;
 private Button sendButton;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //電話號碼
        phoneNumEditText = (EditText)findViewById(R.id.phoneNumEditText);
        //訊息
        msgEditText = (EditText)findViewById(R.id.msgEditText);
        sendButton = (Button)findViewById(R.id.sendButton);
        
        //按下發送按鈕
        sendButton.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    //取得預設的SmsManager
    SmsManager smsManager = SmsManager.getDefault();
    PendingIntent pendingIntent = PendingIntent.getBroadcast(SendSMSExample.this, 0, new Intent(), 0);
    //傳送SMS
    smsManager.sendTextMessage(phoneNumEditText.getText().toString(), null, msgEditText.getText().toString(), pendingIntent, null);
   }
  });
    }
}
3. main.xml(Layout)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <TextView 
     android:layout_width="fill_parent"
  android:layout_height="wrap_content" 
  android:text="@string/hello" />
 <EditText 
     android:id="@+id/phoneNumEditText"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"></EditText>
 <EditText 
     android:id="@+id/msgEditText"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"></EditText>
 <Button 
     android:id="@+id/sendButton"
     android:text="發送"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"></Button>
</LinearLayout>

4. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="tw.nicky.SendSMSExample"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SendSMSExample"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.SEND_SMS" />
</manifest> 


5. 執行畫面


2010年6月3日 星期四

HTC Hero終於要升級Android 2.1了

來自官方Plurk的消息,確定於2010.06.04起開發軟體無線更新…

而這次更新的內容就是大家所期待的Android 2.1作業系統升級…

大家趕快去升級吧!



2010年5月27日 星期四

建立Facebook應用程式 Java API (8) - 取得「張貼訊息到塗鴨牆」的權限

1. 如果你想要張貼訊息到使用者的塗鴨牆,則需要先取得使用者的同意才能夠張貼。

    2. 要取得這個權限也不難,只要將網頁導到權限同意頁面而使用者按下同意的按鈕即可。

      3. 至於怎麼取得「權限同意頁面」的網址,做法如下:
        //API_KEY為App的KEY
        //FB_APP_ADDRESS即是使用者按下同意後要導到的網址
        String url = Permission.authorizationUrl(API_KEY, Permission.PUBLISH_STREAM) + "&next=" + FB_APP_ADDRESS;
        //利用Javascript導到權限同意頁面
        response.getWriter().println("<script type='text/javascript'>
        parent.location.href='" + url + "'
        </script>");
        


        2010年5月18日 星期二

        Android Market線上搜尋(AndroSeek)

        • AndroSeek是利用關鍵字查詢,即時的從Android Market上搜尋你所要的App。


        • 在搜尋結果頁面上會呈現每個App的名稱、圖示、下載量、評比、費用…等資訊。


        • 再點進行其中一個App,則可以看到此App的縮圖、描述以及QR Code。


        2010年4月26日 星期一

        Android學習筆記 - 震動(Vibrator)

        1. 若要在應用程式內使用到震動這個服務,需先在AndroidManifest.xml允許存取android.permission.VIBRATE這個權限。


        2. MainActivity.java
        package org.me.android_vibrate;
        import android.app.Activity;
        import android.app.Service;
        import android.os.Bundle;
        import android.os.Vibrator;
        import android.view.View;
        import android.widget.AdapterView;
        import android.widget.ArrayAdapter;
        import android.widget.Spinner;
        import android.widget.Toast;
        
        public class MainActivity extends Activity {
        
            @Override
            public void onCreate(Bundle icicle) {
                super.onCreate(icicle);
                setContentView(R.layout.main);
                Spinner spinner = (Spinner) findViewById(R.id.spinnner);
                ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,new String[]{"長震動","短震動","連續短震動"});
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner.setAdapter(adapter);
        
                spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
                    public void onItemSelected(AdapterView adapterView, View view, int position, long id){
                        //取得震動服務
                        Vibrator myVibrator = (Vibrator) getApplication().getSystemService(Service.VIBRATOR_SERVICE);
                        switch(position) {
                            case 0:
                                //震動3秒
                                myVibrator.vibrate(3000);
                                break;
                            case 1:
                                //震動0.1秒
                                myVibrator.vibrate(100);
                                break;
                            case 2:
                                //停0.01秒之後震動0.1秒(重覆三次)
                                myVibrator.vibrate(new long[]{10, 100, 10, 100, 10, 100}, -1);
                                break;
                            default:
                                break;
                        }
                    }
                    public void onNothingSelected(AdapterView arg0) {
                        Toast.makeText(MainActivity.this, "您沒有選擇任何項目", Toast.LENGTH_LONG).show();
                    }
                });
            }
        }
        



        3. main.xml(Layout)
        <?xml version="1.0" encoding="UTF-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">" 
            <Spinner
                android:id="@+id/spinnner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </Spinner>
        </LinearLayout>
        


        4. AndroidManifest.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
             package="org.me.android_vibrate">
            <application>
                 <activity android:name=".MainActivity" android:label="Vibrate">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                </activity>
            </application>
            <uses-permission android:name="android.permission.VIBRATE" />
        </manifest>
        



        5. 執行之後的畫面。


        Android學習筆記 - 背景執行服務(Service)

        1. 大部分使用者在手機上看到的畫面都是前端的程式(Activity),但是還是要有很多的服務需在背景執行。
        如果是要在背景執行的程式,則需要寫成Service並繼承android.app.Service,由於是在背景執行所以是
        要寫成Service而不是Activity,因此需在AndroidManifest新增一個Service。以下範例是按下Start Service之後會
        在背景每隔一秒Log目前的時間,按下Stop Service後會停止Log的動作。



        2. MainActivity.java
        package org.me.android_service;
        import android.app.Activity;
        import android.content.Intent;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.Button;
        
        public class MainActivity extends Activity {
            private Button startButton;
            private Button stopButton;
        
            @Override
            public void onCreate(Bundle icicle) {
                super.onCreate(icicle);
                setContentView(R.layout.main);
                startButton = (Button) findViewById(R.id.startButton);
                stopButton = (Button) findViewById(R.id.stopButton);
                startButton.setOnClickListener(startClickListener);
                stopButton.setOnClickListener(stopClickListener);
            }
        
            private Button.OnClickListener startClickListener = new Button.OnClickListener() {
                public void onClick(View arg0) {
                    //啟動服務
                    Intent intent = new Intent(MainActivity.this, NickyService.class);
                    startService(intent);
                }
            };
        
            private Button.OnClickListener stopClickListener = new Button.OnClickListener() {
                public void onClick(View arg0) {
                    //停止服務
                    Intent intent = new Intent(MainActivity.this, NickyService.class);
                    stopService(intent);
                }
            };
        }
        


        3. NickyService.java
        package org.me.android_service;
        import android.app.Service;
        import android.content.Intent;
        import android.os.Handler;
        import android.os.IBinder;
        import android.util.Log;
        import java.util.Date;
        
        //繼承android.app.Service
        public class NickyService extends Service {
            private Handler handler = new Handler();
        
            @Override
            public IBinder onBind(Intent intent) {
                return null;
            }
        
            @Override
            public void onStart(Intent intent, int startId) {
                handler.postDelayed(showTime, 1000);
                super.onStart(intent, startId);
            }
        
            @Override
            public void onDestroy() {
                handler.removeCallbacks(showTime);
                super.onDestroy();
            }
            
            private Runnable showTime = new Runnable() {
                public void run() {
                    //log目前時間
                    Log.i("time:", new Date().toString());
                    handler.postDelayed(this, 1000);
                }
            };
        }
        


        4. main.xml(Layout)
        <?xml version="1.0" encoding="utf-8"?>
        <AbsoluteLayout
        android:id="@+id/widget0"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        >
        <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start Service"
        android:layout_x="40px"
        android:layout_y="67px"
        >
        </Button>
        <Button
        android:id="@+id/stopButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Stop Service"
        android:layout_x="140px"
        android:layout_y="67px"
        >
        </Button>
        </AbsoluteLayout>
        


        5. AndroidManifest.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
             package="org.me.android_spinner">
            <application>
                 <activity android:name=".MainActivity" android:label="MainActivity">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                </activity>
                <service android:name=".NickyService"/>
            </application>
        </manifest>
        



        6. 執行之後的畫面。