2010年2月25日 星期四

建立Facebook应用程式 Java API (4) - 发布通知及张贴讯息到涂鸭墙

利用Facebook API可以发布通知给使用者的朋友,也可以贴讯息到使用者的涂鸭墙上。

1. 发布通知给使用者的朋友
List reciver = new ArrayList();
reciver.add(friendsUID);
client.notifications_send(reciver, "msg"); 

2.  贴讯息到使用者的涂鸭墙上
// 贴讯息到使用者的涂鸭墙上(每个使用者一日限十篇)
// 设定张贴的讯息
Attachment attachment = new Attachment();
attachment.setName("Name");
//设定Name的超连结位址
attachment.setHref("http://www.google.com.tw/");
attachment.setCaption("caption");
attachment.setDescription("yahoo description\ntest");

//加入图片
AttachmentMediaImage attachmentMediaImage = new AttachmentMediaImage("http://www.google.com.tw/intl/en_com/images/logo_plain.png", "http://www.google.com");
attachment.setMedia(attachmentMediaImage);

//ActionLink是会出现在'留言 · 赞'後面的超连结(只有发布到自己的涂鸭墙才会出现)
List actionLiks = new ArrayList();
BundleActionLink bundleActionLink = new BundleActionLink("yahoo", "http://tw.yahoo.com");
actionLiks.add(bundleActionLink);

//发布到涂鸭墙
client.stream_publish("This is a Java API Test.", attachment, actionLiks, null, null);


建立Facebook应用程式 Java API (3) - 利用API取得使用者相关资讯

透过Facebook API可以取得使用者Profile内的资料(除了Email)丶使用者所有朋友的Profile资料(如:名子丶性别丶图片…)以及和应用程式相关的资料。

String sessionKey = request.getParameter("fb_sig_session_key");
 FacebookJaxbRestClient client = new FacebookJaxbRestClient(apiKey, secret, sessionKey);

  //使用者UID
  Long userId = client.users_getLoggedInUser();

 //使用者的所有friends
  List friendsUID = client.friends_get().getUid();

  //使用者friend的分类
  List friendLists = client.friends_getLists().getFriendlist();

  //有使用此应用程式的friends
  List appUsers = client.friends_getAppUsers().getUid();

  //检查应用程式是否有发布讯息到使用者涂鸭墙的权限(也可利用此方法来检查其它权限)
  boolean publish  = client.users_hasAppPermission(Permission.PUBLISH_STREAM);

  //使用者授权的连结
  String url = Permission.authorizationUrl(apiKey, Permission.PUBLISH_STREAM); 


建立Facebook应用程式 Java API (2) - 开始使用Java API

1. 下载Java API

2. 将所需的Jar档汇入

3. 建立一个Servlet(此Servlet的位址需是Canvas Callback URL)

4. 撰写此Servlet
     a. 藉由fb_sig_session_key参数来判断该FB使用者是否有加入此应用程式
            String sessionKey = request.getParameter("fb_sig_session_key");
     b. 若sessionKey为null则表示该FB使用者未加入此应用程式,则将网页重新导向到要求允许存取页面
           <script type='text/javascript'>
                parent.location.href='http://www.facebook.com/login.php?v=1.0&api_key=[your_api_key]&
               next=[Canvas Callback URL]&canvas=';
            </script>
     c. 若sessionKey不为null,则可使用api_key, secret, seessionKey来取得FacebookJaxbRestClient
             FacebookJaxbRestClient client = new FacebookJaxbRestClient(api_key, secret, seessionKey);


建立Facebook应用程式 Java API (1) - 申请应用程式

1. 加入开发人员应用程式
 
2. 建立一个新的应用程式

3.  输入应用程式名称

4.  记住自己应用程式的ID, API key, Secret

5. 选择画布(Canvas),并输入你的Canvas url(需小写)及你的server的url

6.  应用程式的细节




Android学习笔记 - 长按选单(ContextMenu)

1. 在萤幕按下2至3秒之後出现选单,这是使用ContextMenu物件来达到此效果

2. 需覆写onCreateContextMenu及onContextItemSelected这二个方法

3. MainActivity.java
package org.me.android_contextmenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        LinearLayout windowLayout = (LinearLayout) findViewById(R.id.windowLayout);
        //注册长按选单
        this.registerForContextMenu(windowLayout);
    }


    @Override
    public boolean onContextItemSelected(MenuItem item) {
        //当使用者点选项目时,所需的动作
        Toast.makeText(this, "您选择的是"+item.getTitle(), Toast.LENGTH_SHORT).show();
        return super.onContextItemSelected(item);
    }


    @Override
    public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenuInfo menuInfo) {
        //设定选单内容
        super.onCreateContextMenu(contextMenu, view, menuInfo);
        contextMenu.add(0, 0, 0, "红茶");
        contextMenu.add(0, 1, 0, "奶茶");
        contextMenu.add(0, 2, 0, "绿茶");
        contextMenu.add(0, 3, 0, "青茶");
    }
}


3. main.xml(Layout)




4. 执行之後的画面。



Android学习笔记 - 网格视图(GridView)

1. 利用网格视图(GridView)物件来呈现项目列表

2. MainActivity.java
package org.me.android_gridview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private GridView gridView;
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        gridView = (GridView) findViewById(R.id.gridView);
        final String[] list = new String[]{"王建民","郭泓志","倪福德","胡金龙"};
        //设定列表内容
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
        //设定列数
        gridView.setNumColumns(2);
        gridView.setAdapter(adapter);
        //项目被点选时,回应的动作
        gridView.setOnItemClickListener(new GridView.OnItemClickListener(){
           @Override
           public void onItemClick(AdapterView adapterView,View view,int position,long id) {
               Toast.makeText(MainActivity.this, "您选择的是"+list[position], Toast.LENGTH_SHORT).show();
           }
        });
    }
}


3. main.xml(Layout)
<
" 
    
    



4. 执行之後的画面。


Android学习笔记 - 自动填入文字(AutoCompleteTextView)

1. 利用(AutoCompleteTextView)物件来达到自动填入文字

2. MainActivity.java
package org.me.android_autocompletetextview;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class MainActivity extends Activity {
    private AutoCompleteTextView autoComplete;
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        autoComplete = (AutoCompleteTextView) findViewById(R.id.autoComplete);
        String[] phone = new String[]{"0986254878","0985225787","098525879","0985012486","0985658745"};
        //设定自动填入的文字内容
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,phone);
        autoComplete.setAdapter(adapter);
    }
}


3. main.xml(Layout)
" 
    
    



4. 在「自动填入文字框」输入文字之後出现的画面。


Android学习笔记 - 下拉式选单(Spinner)

1. 透过Spinner物件建立下拉式选单

2. MainActivity.java
package org.me.android_spinner;
import android.app.Activity;
import android.os.Bundle;
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物件,并放置下拉选单的内容
        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){
                Toast.makeText(MainActivity.this, "您选择"+adapterView.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
            }
            public void onNothingSelected(AdapterView arg0) {
                Toast.makeText(MainActivity.this, "您没有选择任何项目", Toast.LENGTH_LONG).show();
            }
        });
    }
}


3. main.xml(Layout)

    
    
    
    



4. 下拉式选单画面


Android学习笔记 - 传递参数到下一个Activity

1. 透过Bundle物件传递参数到下一个Activity

2. 第一个Activity(MainActivity.java)
package org.me.android_transferparam;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    private Button nextButton;
    private EditText nameEdit;
    private EditText phoneEdit;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        //载入所有的Widget
        loadWidget();
        
        nextButton.setOnClickListener(new Button.OnClickListener(){
           @Override
           public void onClick(View view){
               //传送参数到下一个Actitity
               deliverToNextActitity();
           }
        });
    }

    public void deliverToNextActitity(){
        //建立一个bundle物件,并将要传递的参数放到bundle里
        Bundle bundle = new Bundle();
        bundle.putString("name", nameEdit.getText().toString());
        bundle.putString("phone", phoneEdit.getText().toString());
        Intent intent = new Intent();
        //设定下一个Actitity
        intent.setClass(this, SecondActivity.class);
        intent.putExtras(bundle);
        //开启Activity
        startActivity(intent);
    }

    private void loadWidget(){
        nextButton = (Button) findViewById(R.id.nextButton);
        nameEdit = (EditText) findViewById(R.id.nameEdit);
        phoneEdit = (EditText) findViewById(R.id.phoneEdit);
    }
}

3. 第二个Activity(SecondActivity.java)
package org.me.android_transferparam;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends Activity {

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.second);
        TextView content = (TextView) findViewById(R.id.content);
        Button backButton = (Button) findViewById(R.id.backButton);
        //取得前一个Activity传过来的Bundle物件
        Bundle bundle = getIntent().getExtras();
        content.setText("姓名:"+bundle.getString("name")+"   电话:"+bundle.getString("phone"));

        backButton.setOnClickListener(new Button.OnClickListener(){
           @Override
           public void onClick(View view){
               //结束此Activity
               finish();
           }
        });
    }
}

4. main.xml(Layout)

    
    
    
    
    
    
    
    
    


5. second.xml(Layout)
"
    
    
    


6. 程式启动及输入参数之後的画面


Android学习笔记 - 多选项对话框(Dialog)

1. 利用AlertDialog物件来显示对话框,并利用字串阵列来标示选项的标题。

2. MainActivity.java
package org.me.android_multiitemdialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button showDialogButton;
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        showDialogButton = (Button) findViewById(R.id.showDialogButton);
        final AlertDialog mutiItemDialog = getMutiItemDialog(new String[]{"牛排","鸡排","猪排"});

        showDialogButton.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View view){
                //显示对话框
                mutiItemDialog.show();
            }
        });
    }

    public AlertDialog getMutiItemDialog(final String[] items) {
        Builder builder = new Builder(this);
        //设定对话框内的项目
        builder.setItems(items, new DialogInterface.OnClickListener(){
           @Override
           public void onClick(DialogInterface dialog,int which){
               //当使用者点选对话框时,显示使用者所点选的项目
               Toast.makeText(MainActivity.this, "您选择的是"+items[which], Toast.LENGTH_SHORT).show();
           }
        });
        return builder.create();
    }
}

3. main.xml(Layout)
" 
    

4. 按下「多个选项的对话框」按钮之後出现的画面。


Android学习笔记 - 对话框(Dialog)

1. 利用AlertDialog物件来显示对话框。

2. MainActivity.java
package org.me.android_dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Button dialogButton;
    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        dialogButton = (Button) findViewById(R.id.dialogButton);
        final AlertDialog alertDialog = getAlertDialog("这是一个对话框","请选择......");
        dialogButton.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(final View view) {
                //显示对话框
                alertDialog.show();
            }
        });
    }

    private AlertDialog getAlertDialog(String title,String message){
        //产生一个Builder物件
        Builder builder = new AlertDialog.Builder(MainActivity.this);
        //设定Dialog的标题
        builder.setTitle(title);
        //设定Dialog的内容
        builder.setMessage(message);
        //设定Positive按钮资料
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //按下按钮时显示快显
                Toast.makeText(MainActivity.this, "您按下OK按钮", Toast.LENGTH_SHORT).show();
            }
        });
        //设定Negative按钮资料
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //按下按钮时显示快显
                Toast.makeText(MainActivity.this, "您按下Cancel按钮", Toast.LENGTH_SHORT).show();
            }
        });
        //利用Builder物件建立AlertDialog
        return builder.create();
    }
}

3. main.xml(Layout)
" 
    


4. 按下ShowDialog按钮之後出现的画面


Android学习笔记 - 显示快显(Toast)

1. 利用Toast物件来显示快显。

2. MainActivity.java
package org.me.android_toast;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Button toastButton;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        toastButton = (Button) findViewById(R.id.toastButton);

        //设定按钮的ClickListener
        toastButton.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                //当使用者按下按钮时显示Toast
                //Toast.LENGTH_LONG表示显示时间较长,Toast.LENGTH_SHORT则表示显示时间较短
                Toast.makeText(view.getContext(), "这是一个Toast......", Toast.LENGTH_LONG).show();
            }
        });
    }
}

3. main.xml(Layout)

    



4. 按下ShowToast按钮之後出现的画面


Android学习笔记 - 建立选单(Menu)

1. 利用覆写onCreateOptionsMenu, onOptionsItemSelected这二个方法来建立选单。

2. MainActivity.java
package org.me.android_menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView describe;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        describe = (TextView) findViewById(R.id.describe);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //参数1:群组id, 参数2:itemId, 参数3:item顺序, 参数4:item名称
        menu.add(0, 0, 0, "说明");
        menu.add(0, 1, 1, "离开");
        return super.onCreateOptionsMenu(menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //依据itemId来判断使用者点选哪一个item
        switch(item.getItemId()) {
            case 0:
                //在TextView上显示说明
                describe.setText("这是说明............");
                break;
            case 1:
                //结束此程式
                finish();
                break;
            default:
        }
        return super.onOptionsItemSelected(item);
    }
}
3. main.xml(Layout)
" 
    

4. 按下MENU键之後出现及点选「说明」之後出现的画面






Android學習筆記 - Hello World

使用TextView秀出Hello World

1. MainActivity.java
package org.me.android_helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        //设定要使用的layout
        setContentView(R.layout.main);
        //取得TextView物件
        TextView view = (TextView) findViewById(R.id.textView);
        view.setText("hellworld");
    }
}

2. main.xml
" 
    


3. AndroidManifest.xml

    
         
            
                
                
            
        
    


4. 结果


Android学习笔记 - 安装Netbeans 6.7 Android Plugin

1. 选择Tools -> Plugins



2. 选择Setting并按下新增



3. 输入Plugin的URL http://kenai.com/downloads/nbandroid/updates.xml



4.  到Avalible Plugins找到Android并安装



5. 安装完成後,新增一个Android的专案



6.  选择Manage Platforms



7. 新增一个Android Platform






8. 选择Android SDK的安装位置




 9.选择要使用的Target