Android知识点参考

时间:2024.4.2

Activity 之间的手势切换

对于Android桌面可以用手势左右滑动进行切换。或者大家用过iReader的一定被其丰富的手势折服吧。现在看看自己的多个Activy之间如何切换呢

1、需要继承OnGestureListener和OnDoubleTapListener,如下:

1.  public   class  ViewSnsActivity  extends  Activity  implements  OnTouchListener, OnGestureListener  

public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener

2、在添加mGestureDetector的定义,并在 ViewSnsActivity的onCreate函数中加入其页面布局的setOnTouchListener事件

1.  GestureDetector mGestureDetector;  

GestureDetector mGestureDetector;

 

1.  public   void  onCreate(Bundle savedInstanceState) {  

2.          super .onCreate(savedInstanceState);  

3.          setContentView(R.layout.view_sns_activity);  

4.            

5.          mGestureDetector = new  GestureDetector((OnGestureListener)  this );    

6.          LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout);    

7.          viewSnsLayout.setOnTouchListener(this );    

8.          viewSnsLayout.setLongClickable(true );    

9.      }  

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_sns_activity); mGestureDetector = new GestureDetector((OnGestureListener) this); LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout); viewSnsLayout.setOnTouchListener(this); viewSnsLayout.setLongClickable(true); }

 

3、重载onFling函数

1.       public   boolean  onFling(MotionEvent e1, MotionEvent e2,  float  velocityX,  

2.              float  velocityY) {  

3.            

4.          if  (e1.getX()-e2.getX() > snsConstant.getFlingMinDistance()  

5.                  && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {  

6.    

7.  //          切换Activity   

8.  //          Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);   

9.  //          startActivity(intent);   

10.             Toast.makeText(this ,  "向左手势" , Toast.LENGTH_SHORT).show();  

11.         } else   if  (e2.getX()-e1.getX() > snsConstant.getFlingMinDistance()  

12.                 && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {  

13.               

14. //          切换Activity   

15. //          Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);   

16. //          startActivity(intent);   

17.             Toast.makeText(this ,  "向右手势" , Toast.LENGTH_SHORT).show();  

18.         }  

19.           

20.         return   false ;    

21.     }  

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getX()-e2.getX() > snsConstant.getFlingMinDistance() && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) { // 切换Activity // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class); // startActivity(intent); Toast.makeText(this, "向左手势", Toast.LENGTH_SHORT).show(); } else if (e2.getX()-e1.getX() > snsConstant.getFlingMinDistance() && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) { // 切换Activity // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class); // startActivity(intent); Toast.makeText(this, "向右手势", Toast.LENGTH_SHORT).show(); } return false; }

其中SnsConstant如下:

1.  public   class  SnsConstant {  

2.      private   static   final   int  FLING_MIN_DISTANCE =  50 ;    

3.      private   static   final   int  FLING_MIN_VELOCITY =  0 ;  

4.        

5.      public   static   int  getFlingMinDistance() {  

6.          return  FLING_MIN_DISTANCE;  

7.      }  

8.      public   static   int  getFlingMinVelocity() {  

9.          return  FLING_MIN_VELOCITY;  

10.     }  

11. }  

public class SnsConstant { private static final int FLING_MIN_DISTANCE = 50; private static final int FLING_MIN_VELOCITY = 0; public static int getFlingMinDistance() { return FLING_MIN_DISTANCE; } public static int getFlingMinVelocity() { return FLING_MIN_VELOCITY; } }

4、重载onTouch函数

1.  public   boolean  onTouch(View v, MotionEvent event) {  

2.      return  mGestureDetector.onTouchEvent(event);  

3.  }  

获取android中正在运行应用程序的列表

public boolean onTouch(View v, MotionEvent event) { return mGestureDetector.onTouchEvent(event); }

 废话不多说!看代码。

ActivityMain.java

view plaincopy to clipboardprint?

1.  public class ActivityMain extends ListActivity {  

2.      @Override  

3.      public void onCreate(Bundle savedInstanceState) {  

4.          super.onCreate(savedInstanceState);  

5.          requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  

6.           

7.         List<Programe> list = getRunningProcess();  

8.         ListAdapter adapter = new ListAdapter(list,this);  

9.         getListView().setAdapter(adapter);  

10.     }  

11.       

12.     //正在运行的   

13.     public List<Programe> getRunningProcess(){  

14.         PackagesInfo pi = new PackagesInfo(this);  

15.           

16.         ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  

17.         //获取正在运行的应用   

18.         List<RunningAppProcessInfo> run = am.getRunningAppProcesses();  

19.         //获取包管理器,在这里主要通过包名获取程序的图标和程序名   

20.         PackageManager pm =this.getPackageManager();  

21.         List<Programe> list = new ArrayList<Programe>();      

22.           

23.         for(RunningAppProcessInfo ra : run){  

24.             //这里主要是过滤系统的应用和电话应用,当然你也可以把它注释掉。   

25.             if(ra.processName.equals("system") || ra.processName.equals("com.android.phone")){  

26.                 continue;  

27.             }  

28.               

29.             Programe  pr = new Programe();  

30.             pr.setIcon(pi.getInfo(ra.processName).loadIcon(pm));  

31.             pr.setName(pi.getInfo(ra.processName).loadLabel(pm).toString());  

32.             System.out.println(pi.getInfo(ra.processName).loadLabel(pm).toString());  

33.             list.add(pr);  

34.         }  

35.         return list;  

36.     }  

37.       

38. }  

ListAdapter.java

view plaincopy to clipboardprint?

1.  public class ListAdapter extends BaseAdapter {  

2.      List<Programe> list = new ArrayList<Programe>();  

3.      LayoutInflater la;  

4.      Context context;  

5.        

6.      public ListAdapter(List<Programe> list ,Context context){  

7.          this.list = list;  

8.          this.context = context;  

9.      }  

10.       

11.     @Override  

12.     public int getCount() {  

13.         // TODO Auto-generated method stub   

14.         return list.size();  

15.     }  

16.     @Override  

17.     public Object getItem(int position) {  

18.         // TODO Auto-generated method stub   

19.         return list.get(position);  

20.     }  

21.     @Override  

22.     public long getItemId(int position) {  

23.         // TODO Auto-generated method stub   

24.         return position;  

25.     }  

26.     @Override  

27.     public View getView(int position, View convertView, ViewGroup parent) {  

28.         ViewHolder holder;  

29.         if(convertView == null)  

30.         {    

31.             la = LayoutInflater.from(context);  

32.             convertView=la.inflate(R.layout.list_item, null);  

33.               

34.             holder = new ViewHolder();  

35.             holder.imgage=(ImageView) convertView.findViewById(R.id.image);  

36.             holder.text = (TextView) convertView.findViewById(R.id.text);  

37.               

38.             convertView.setTag(holder);  

39.         }else{  

40.             holder = (ViewHolder) convertView.getTag();  

41.         }  

42.          final Programe pr = (Programe)list.get(position);  

43.         //设置图标   

44.         holder.imgage.setImageDrawable(pr.getIcon());  

45.         //设置程序名   

46.         holder.text.setText(pr.getName());  

47.           

48.         return convertView;  

49.     }  

50. }  

51. class ViewHolder{  

52.      TextView text;  

53.     ImageView imgage;  

54. }  

PackagesInfo.java

view plaincopy to clipboardprint?

1.  public class PackagesInfo {  

2.      private List<ApplicationInfo> appList;  

3.        

4.      public PackagesInfo(Context context){  

5.          //通包管理器,检索所有的应用程序(甚至卸载的)与数据目录   

6.          PackageManager pm = context.getApplicationContext().getPackageManager();  

7.          appList = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);  

8.      }  

9.        

10.       

11.       

12.     /** 

13.      * 通过一个程序名返回该程序的一个Application对象。 

14.      * @param name  程序名 

15.      * @return  ApplicationInfo  

16.      */  

17.       

18.     public ApplicationInfo getInfo(String name){  

19.         if(name == null){  

20.             return null;  

21.         }  

22.         for(ApplicationInfo appinfo : appList){  

23.             if(name.equals(appinfo.processName)){  

24.                 return appinfo;  

25.             }  

26.         }  

27.         return null;  

28.     }  

29.       

30. }  

Programe.java

view plaincopy to clipboardprint?

1.  public class Programe {  

2.      //图标   

3.      private Drawable icon;    

4.      //程序名   

5.      private String name;  

6.        

7.      public Drawable getIcon() {  

8.          return icon;  

9.      }  

10.     public void setIcon(Drawable icon) {  

11.         this.icon = icon;  

12.     }  

13.     public String getName() {  

14.         return name;  

15.     }  

16.     public void setName(String name) {  

17.         this.name = name;  

18.     }  

19.       

20. }  

list_item.xml

view plaincopy to clipboardprint?

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

3.      android:orientation="horizontal"  

4.      android:layout_width="wrap_content"  

5.      android:layout_height="wrap_content"  

6.     >  

7.      <ImageView  

8.          android:id="@+id/image"  

9.          android:layout_width="wrap_content"  

10.         android:layout_height="wrap_content"  

11.         android:layout_marginRight="10dip"  

12.     />   

13.   <TextView  

14.     android:id="@+id/text"  

15.     android:layout_width="wrap_content"  

16.     android:layout_height="wrap_content"  

17.   />  

18.      

19.    </LinearLayout>  

效果如图:

http://hi.csdn.net/attachment/201101/11/0_1294714337tYeO.gif

SQLite 小例子。

这是我在网站看到过一个网友做的SQLite一个小程序,觉得写的不错,以供提示参考,所以把转载下来了。其实就是一个小收藏夹。

代码如下:

ActivityMain_1.java

view plaincopy to clipboardprint?

1.  public class ActivityMain_1 extends Activity {  

2.      //声明EditText实例   

3.      private EditText et1,et2,et3;  

4.      //声明Button实例   

5.      private Button button;  

6.        

7.      @Override  

8.      protected void onCreate(Bundle savedInstanceState) {  

9.          // TODO Auto-generated method stub   

10.         super.onCreate(savedInstanceState);  

11.         setContentView(R.layout.main_1);  

12.           

13.         //根据ID获得实例对象   

14.         et1 = (EditText) findViewById(R.id.EditText01);  

15.         et2 = (EditText) findViewById(R.id.EditText02);  

16.         et3 = (EditText) findViewById(R.id.EditText03);  

17.         button = (Button) findViewById(R.id.button);  

18.           

19.         //事件   

20.         button.setOnClickListener(new View.OnClickListener() {  

21.               

22.             @Override  

23.             public void onClick(View v) {  

24.                 String name=et1.getText().toString();  

25.                 String url =et2.getText().toString();  

26.                 String desc = et3.getText().toString();  

27.               

28.                 ContentValues values = new ContentValues();  

29.                   

30.                 values.put("name", name);  

31.                 values.put("url", url);  

32.                 values.put("desc", desc);  

33.                   

34.                 //实例化数据库帮助类   

35.                 DBHelper helper = new DBHelper(getApplicationContext());  

36.                 //打开数据库   

37.                 helper.open();   

38.                   

39.                 //插入数据   

40.                 helper.insert(values);  

41.                 //实例化Intent   

42.                 Intent intent = new Intent(ActivityMain_1.this,QueryActivity.class);  

43.                 startActivity(intent);  

44.                 helper.close();  

45.             }  

46.         });  

47.           

48.     }  

49.       

50.       

51. }  

QueryActivity.java

view plaincopy to clipboardprint?

1.  public class QueryActivity extends ListActivity {  

2.        

3.      private ListView listView;  

4.      private Cursor c;  

5.         

6.      @Override  

7.      protected void onCreate(Bundle savedInstanceState) {  

8.          // TODO Auto-generated method stub   

9.          super.onCreate(savedInstanceState);  

10.         //setContentView(R.layout.row);   

11.           

12.         //实例化数据库帮助类   

13.         final DBHelper help = new DBHelper(this);  

14.         help.open();  

15.         c= help.query();  

16.          query();  

17.         //提示对话框   

18.         final AlertDialog.Builder builder = new AlertDialog.Builder(this);  

19.         listView.setOnItemClickListener(new OnItemClickListener() {  

20.             @Override  

21.             public void onItemClick(AdapterView<?> parent, View view,  

22.                     int position, long id) {  

23.                 final long temp = id;  

24.                 builder.setMessage("真的要删除该条记录吗?").setPositiveButton("是", new DialogInterface.OnClickListener() {  

25.                       

26.                     @Override  

27.                     public void onClick(DialogInterface dialog, int which) {  

28.                         System.out.println("yes");  

29.                         help.del((int)temp);  

30.                         //重新查询   

31.                         //query();   

32.                         Cursor c = help.query();  

33.                         //列表项数组   

34.                         String[] from ={"_id","name","url","desc"};  

35.                         //列表项ID   

36.                         int[] to ={R.id.text0,R.id.text1,R.id.text2,R.id.text3};  

37.                         //适配器   

38.                         SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(),R.layout.row,c,from,to);  

39.                         ListView listView = getListView();  

40.                         listView.setAdapter(adapter);  

41.                           

42.                           

43.                     }  

44.                 }).setNegativeButton("否", new DialogInterface.OnClickListener() {  

45.                       

46.                     @Override  

47.                     public void onClick(DialogInterface dialog, int which) {  

48.                         // TODO Auto-generated method stub   

49.                           

50.                     }  

51.                 });  

52.                 builder.create();  

53.                 builder.show();  

54.             }  

55.         });  

56.           

57.     }  

58.     @Override  

59.     protected void onStop() {  

60.         // TODO Auto-generated method stub   

61.         super.onStop();  

62.           

63.     }  

64.     public void query(){  

65.         //列表项数组   

66.         String[] from ={"_id","name","url","desc"};  

67.         //列表项ID   

68.         int[] to ={R.id.text0,R.id.text1,R.id.text2,R.id.text3};  

69.           

70.         //适配器   

71.         SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.row,c,from,to);  

72.         //adapter.notifyDataSetChanged();   

73.         //列表视图   

74.          listView = getListView();  

75.         //为列表视图添加适配器   

76.         listView.setAdapter(adapter);  

77.           

78.     }  

79.       

80.       

81. }  

DBHelper.java

view plaincopy to clipboardprint?

1.  public class DBHelper extends SQLiteOpenHelper {  

2.        

3.      private static final String DB_NAME="coll.db";  

4.      //表名   

5.      private static final String TBL_NAME="logtable";  

6.      //创建SQL语句   

7.      private static final String CREATE_TBL = "create table logtable " +  

8.              "(_id integer primary key autoincrement,name text,url text,desc text)";  

9.      //SQLiteDatabase实例   

10.     private SQLiteDatabase db;  

11.       

12.     public DBHelper(Context context) {  

13.         super(context, DB_NAME, null, 2);  

14.           

15.     }  

16.     @Override  

17.     public void onCreate(SQLiteDatabase db) {  

18.           

19.         db.execSQL(CREATE_TBL);  

20.     }  

21.       

22.     //打开数据库   

23.     public void open(){  

24.         db = getWritableDatabase();  

25.     }  

26.       

27.     @Override  

28.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  

29.         // TODO Auto-generated method stub   

30.     }  

31.       

32.     //插入方法   

33.     public void insert(ContentValues values){  

34.           

35.         db.insert(TBL_NAME, null, values);  

36.     }  

37.       

38.     //查询方法   

39.     public Cursor query(){  

40.         Cursor c = db.query(TBL_NAME, null, null, null, null, null, null);  

41.         return c;  

42.     }  

43.       

44.     //删除方法   

45.     public void del(int id){  

46.         db.delete(TBL_NAME, "_id=?", new String[]{String.valueOf(id)});  

47.     }  

48.       

49.     //关闭数据库   

50.     public void close(){  

51.         if (db != null){  

52.             db.close();  

53.         }  

54.     }  

55. }  

main_1.xml

view plaincopy to clipboardprint?

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

3.      android:orientation="vertical"  

4.      android:layout_width="fill_parent"  

5.      android:layout_height="fill_parent"  

6.      >  

7.        

8.      <TextView  

9.          android:id="@+id/TextView01"  

10.         android:layout_width="fill_parent"  

11.         android:layout_height="wrap_content"  

12.         android:text="网站名称"  

13.     />  

14.     <EditText  

15.         android:id="@+id/EditText01"  

16.         android:layout_width="fill_parent"  

17.         android:layout_height="wrap_content"  

18.           

19.     />  

20.     <TextView  

21.         android:id="@+id/TextView02"  

22.         android:layout_width="fill_parent"  

23.         android:layout_height="wrap_content"  

24.         android:text="URL"  

25.     />  

26.     <EditText  

27.         android:id="@+id/EditText02"  

28.         android:layout_width="fill_parent"  

29.         android:layout_height="wrap_content"  

30.     />  

31.     <TextView  

32.         android:id="@+id/TextView03"  

33.         android:layout_width="fill_parent"  

34.         android:layout_height="wrap_content"  

35.         android:text="网站描述"  

36.     />  

37.     <EditText  

38.         android:id="@+id/EditText03"  

39.         android:layout_width="fill_parent"  

40.         android:layout_height="wrap_content"  

41.         android:height="100px"  

42.     />  

43.       

44.     <Button  

45.         android:id="@+id/button"  

46.         android:layout_width="wrap_content"  

47.         android:layout_height="wrap_content"  

48.         android:text="添加"  

49.     />  

50. </LinearLayout>  

自定义布局:row.xml

view plaincopy to clipboardprint?

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

3.      android:orientation="horizontal"  

4.      android:layout_width="fill_parent"  

5.      android:layout_height="fill_parent"  

6.      android:layout_gravity="center_vertical"  

7.      >  

8.        

9.      <TextView  

10.         android:id="@+id/text0"  

11.         android:layout_width="wrap_content"  

12.         android:layout_height="wrap_content"  

13.         android:paddingRight="10px"  

14.     />  

15.     <TextView  

16.         android:id="@+id/text1"  

17.         android:layout_width="wrap_content"  

18.         android:layout_height="wrap_content"  

19.         android:paddingRight="10px"  

20.     />  

21.     <TextView  

22.         android:id="@+id/text2"  

23.         android:layout_width="wrap_content"  

24.         android:layout_height="wrap_content"  

25.         android:paddingRight="10px"  

26.     />  

27.     <TextView  

28.         android:id="@+id/text3"  

29.         android:layout_width="wrap_content"  

30.         android:layout_height="wrap_content"  

31.         android:paddingRight="10px"  

32.     />  

33.       

34. </LinearLayout>  

结果如图所示:

http://hi.csdn.net/attachment/201012/30/0_1293690070fJvW.gif

http://hi.csdn.net/attachment/201012/30/0_1293690077Rhm5.gif

roadcast Receive广播

一.Broadcast Receive为广播接收器,它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,而广播处理机制是系统级别的。

Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。程序可以有任意数量的 broadcast receivers来响应它觉得重要的通知。broadcast receiver可以通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。

通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。

android广播事件处理broadcast <wbr>receive
二.事件的广播比价简单,构建Intent对象,调用sendBroadcast()方法将广播发出。事件的接收是通过定义一个继承BroadcastReceiver类来实现,继承该类后覆盖其onReceiver方法,并在该方法中相应事件。 
  MainActivity: 
   Intent intent=new Intent(); 
   intent.setAction(MY_ACTION); 
   intent.putExtra("msg","请回复"); 
   sendBroadcast(intent); 
  MyReceiver: 
   public calss MyReceiver extends BroadcastReceiver{ 
       public void onReceiver(Context ctx,intent intent){ 
            //从Intent中获得信息 
           String msg=intent.getString("msg"); 
          Toast.makeText(ctx,msg,Toast.LENGTH_LONG).show() 


          } 


       } 
   
三.系统广播事件的使用 
   1. 这些广播是系统自动发出,我们直接定义事件接收器进行接收。 
      通过配置文件注册 
      MyReceiver2: 
     public class MyReceiver2 extends BroadcastReceiver{ 
             
           public void onReceiver( Context context,Intent intent){ 
                  Log.i("my_tag","BOOT_COMPLETED") 
                     
                     }     


                 } 
       AndroidMainifest.xml: 
      <receiver android:name="MyReceiver2"> 
          <intent-filter> 
            <android android:name="android.intent.android.BOOT_COMPLETED"> 
         </intent-filter> 
       </receiver> 
       通过代码注册: 
       IntentFilter filter=new IntentFilter();//实例化 
       //实例化Receiver 
       MyReceiver2=new MyReceiver2(); 
      //注册Receiver 
       registerReceiver(r,filter); 
      //注销Receiver 
       unregisterReceiver(r); 
四.Notification和NotificationManager的使用 
   Broadcast Receiver组件并没有提供可视化的界面来显示广播信息。这里我们可以使用Notification和Notification Manager来实现可视化的信息的界面,通过使用它们 ,我们可以显示广播信息的内容,图标及震动信息。 
五.AlarmManager的使用 
   现在的手机普遍都会有一个闹钟功能,如果使用Android来实现一个闹钟,可以使用AlarmManager来实现。AndroidManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个任务,AlarmManager对象一般不直接实例化,而是通过Context.getSystemService(Context.ALARM_SERVICE)方法获得。

实例一、自定义broadcast receive来处理广播事件

/Chapter08_Broadcast_Receiver1/src/com/amaker/ch08/app/MainActivity.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import com.amaker.ch08.app.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
// 定义一个Action常量
private static final String MY_ACTION = "com.amaker.ch08.action.MY_ACTION";
// 定义一个Button对象
private Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前布局视图
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.Button01);
// 为按钮设置单击监听器
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 实例化Intent对象
Intent intent = new Intent();
// 设置Intent action属性
intent.setAction(MY_ACTION);
// 为Intent添加附加信息
intent.putExtra("msg", "地瓜地瓜,我是土豆,收到请回复,收到请回复!");
// 发出广播
sendBroadcast(intent);
}
});
}
}

自定义广播事件的使用

/Chapter08_Broadcast_Receiver1/src/com/amaker/ch08/app/MyReceiver.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;


public class MyReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context cxt, Intent intent) {
// 从Intent中获得信息
String msg = intent.getStringExtra("msg");
// 使用Toast显示
Toast.makeText(cxt, msg, Toast.LENGTH_LONG).show();
}
}

/Chapter08_Broadcast_Receiver1/src/com/amaker/ch08/app/MyReceiver2.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;


public class MyReceiver2 extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// 显示广播信息
Log.i("my_tag", "BOOT_COMPLETED~~~~~~~~~~~~~~~~");
}

}

系统广播事件的使用

/Chapter08_Broadcast_Receiver1/res/layout/main.xml

android广播事件处理broadcast <wbr>receive代码

<?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"
>

<Button
android:text="发出广播..."
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

/Chapter08_Broadcast_Receiver1/AndroidManifest.xml

android广播事件处理broadcast <wbr>receive代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.amaker.ch08.app"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<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>

<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.amaker.ch08.action.MY_ACTION"/>
</intent-filter>
</receiver>

<receiver android:name="MyReceiver2">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>

二、notification和notificationmanager的使用

        1、获取系统级的服务notificationmanager

        String service = NOTIFICATION_SERVICE;
        NotificationManager nm = (NotificationManager)getSystemService(service);
        
        2、实例化Notification
        Notification n = new Notification();
        // 设置显示图标,该图标会在状态栏显示
        int icon = n.icon = R.drawable.icon; 
        // 设置显示提示信息,该信息也会在状态栏显示
        String tickerText = "Test Notification"; 
        // 显示时间
        long when = System.currentTimeMillis();
        n.icon = icon;
        n.tickerText = tickerText;
        n.when = when;

        // 也可以通过这种构造方法来设置
        Notification n1 = new Notification(icon, tickerText, when); 
        
        3、实例化Intent
        Intent intent = new Intent(this, MainActivity_Temp.class); 
        // 获得PendingIntent
        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); 
        // 设置事件信息
        n.setLatestEventInfo(this, "My Title", "My Content", pi); 
        n.defaults |= Notification.DEFAULT_SOUND; 
        n.sound = Uri.parse("file:///sdcard/sound.mp3"); 
        n.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");

        n.defaults |= Notification.DEFAULT_VIBRATE; 
        long[] vibrate = {0,50,100,150}; 
        n.vibrate = vibrate; 
        n.defaults |= Notification.DEFAULT_LIGHTS; 
        n.ledARGB = 0xff00ff00; 
        n.ledOnMS = 300; 
        n.ledOffMS = 1000; 
        n.flags |= Notification.FLAG_SHOW_LIGHTS; 
        

         4、发通知
        // 标示该通知的ID
        int ID = 1;
        // 发出通知
        nm.notify(ID, n);

利用notification和notificationmanager来实现可视化的消息显示。

/Chapter08_Notification1/src/com/amaker/ch08/app/MainActivity.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import com.amaker.ch08.app.R;

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.view.View.OnClickListener;
import android.widget.Button;



public class MainActivity extends Activity {
// 声明按钮
private Button sendBtn,cancelBtn;
// 声明Notification
private Notification n ;
// 声明NotificationManager
private NotificationManager nm;
// Notification标示ID
private static final int ID = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 实例化按钮
sendBtn = (Button)findViewById(R.id.sendButton01);
cancelBtn = (Button)findViewById(R.id.cancelButton02);

// 获得NotificationManager实例
String service = NOTIFICATION_SERVICE;
nm = (NotificationManager)getSystemService(service);

// 实例化Notification
n = new Notification();
// 设置显示图标,该图标会在状态栏显示
int icon = n.icon = R.drawable.happy;
// 设置显示提示信息,该信息也会在状态栏显示
String tickerText = "Test Notification";
// 显示时间
long when = System.currentTimeMillis();
n.icon = icon;
n.tickerText = tickerText;
n.when = when;
// 为按钮添加监听器
sendBtn.setOnClickListener(sendListener);
cancelBtn.setOnClickListener(cancelListener);

}
// 发送通知监听器
private OnClickListener sendListener = new OnClickListener() {
@Override
public void onClick(View v) {
// 实例化Intent
Intent intent = new Intent(MainActivity.this, MainActivity.class);
// 获得PendingIntent
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
// 设置事件信息
n.setLatestEventInfo(MainActivity.this, "My Title", "My Content", pi);
// 发出通知
nm.notify(ID, n);
}
};
// 取消通知监听器
private OnClickListener cancelListener = new OnClickListener() {
@Override
public void onClick(View v) {
// 取消通知
nm.cancel(ID);
}
};
}

/Chapter08_Notification1/res/layout/main.xml

android广播事件处理broadcast <wbr>receive代码

<?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="测试Notification"
/>

<Button
android:text="发出通知"
android:id="@+id/sendButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>

<Button
android:text="取消通知"
android:id="@+id/cancelButton02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>

</LinearLayout>

/Chapter08_Notification1/AndroidManifest.xml

android广播事件处理broadcast <wbr>receive代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.amaker.ch08.app"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<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>

</application>
<uses-sdk android:minSdkVersion="3" />

</manifest>

二、notification、notificationmanager和broadcast receiver的综合实例

/Chapter08_Notification2/src/com/amaker/ch08/app/MainActivity.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import com.amaker.ch08.app.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
// 声明Button
private Button btn;
// 定义Broadcast Receiver action
private static final String MY_ACTION = "com.amaker.ch08.app.MY_ACTION";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前布局视图
setContentView(R.layout.main);
// 实例化Button
btn = (Button)findViewById(R.id.Button01);
// 添加事件监听器
btn.setOnClickListener(listener);
}
// 创建事件监听器
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
// 实例化Intent
Intent intent = new Intent();
// 设置Intent action属性
intent.setAction(MY_ACTION);
// 发起广播
sendBroadcast(intent);
}
};
}

/Chapter08_Notification2/src/com/amaker/ch08/app/DisplayActivity.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import com.amaker.ch08.app.R;

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.view.View.OnClickListener;
import android.widget.Button;

public class DisplayActivity extends Activity {
// 声明按钮
private Button cancelBtn;
// 声明Notification
private Notification n ;
// 声明NotificationManager
private NotificationManager nm;
// Notification标示ID
private static final int ID = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
// 实例化按钮
cancelBtn = (Button)findViewById(R.id.cancelButton02);
// 获得NotificationManager实例
String service = NOTIFICATION_SERVICE;
nm = (NotificationManager)getSystemService(service);

// 实例化Notification
n = new Notification();
// 设置显示图标,该图标会在状态栏显示
int icon = n.icon = R.drawable.happy;
// 设置显示提示信息,该信息也会在状态栏显示
String tickerText = "Test Notification";
// 显示时间
long when = System.currentTimeMillis();
n.icon = icon;
n.tickerText = tickerText;
n.when = when;

// 实例化Intent
Intent intent = new Intent(this, MainActivity.class);
// 获得PendingIntent
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
// 设置事件信息
n.setLatestEventInfo(this, "My Title", "My Content", pi);
// 发出通知
nm.notify(ID, n);

// 为按钮添加监听器
cancelBtn.setOnClickListener(cancelListener);
}

// 取消通知监听器
private OnClickListener cancelListener = new OnClickListener() {
@Override
public void onClick(View v) {
// 取消通知
nm.cancel(ID);
}
};
}

/Chapter08_Notification2/src/com/amaker/ch08/app/MyReceiver.java

android广播事件处理broadcast <wbr>receive代码

package com.amaker.ch08.app;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// 实例化Intent
Intent i = new Intent();
// 在新的任务中启动Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 设置Intent启动的组件名称
i.setClass(context, DisplayActivity.class);
// 启动Activity显示通知
context.startActivity(i);
}

}

/Chapter08_Notification2/res/layout/main.xml

android广播事件处理broadcast <wbr>receive代码

<?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"
>

<Button
android:text="发出广播"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>

</LinearLayout>

android广播事件处理broadcast <wbr>receive代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.amaker.ch08.app"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<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>

<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.amaker.ch08.app.MY_ACTION"/>
</intent-filter>
</receiver>

<activity android:name="DisplayActivity"/>

</application>
<uses-sdk android:minSdkVersion="3" />

</manifest>

更多相关推荐:
Android开发知识点总结

如何获取标题栏和状态栏高度1获取状态栏高度decorView是window中的最顶层view可以从window中获取到decorView然后decorView有个getWindowVisibleDisplayF...

android基本知识点总结

一android四大组件ActivityServiceBroadcastReceiverContentProvider二Activity生命周期三横竖屏切换时的生命周期1新建一个Activity并把各个生命周期...

Android知识点整理

项目目录结构Srcjavaclass源文件GenAndroid开发工具自动生成自动维护不能修改Rjava不能手工修改此类中的内容记录各种资源的ID可以根据R文件中的ID查找各个方法Assets存放资源文件但存放...

android知识点总结

一单选题1Android一词的本义指机器人同时也是c于20xx年11月5日宣布的基于Linux平台的开源手机操作系统的名称A微软公司B英特尔公司C谷歌公司D摩托罗拉公司2下列不是手机操作系统的是DAAndroi...

Android手机游戏开发知识点总结

Android手机游戏知识点总结Android手机游戏开发学习笔记第一部分其实游戏就是让状态机不断的让Canvas在View上画你想要的东西这个状态机包括内部的执行还包括外部的输入Android开发的MVC模式...

Android知识点汇总

目录Android知识点3一dom解析以及写入数据到xml文件3二连接socket并获取返回值4三创建socket服务器4四获取本地设备信息执行串口命令5五获取设备当前时间5六对于节省代码6七访问网络权限6八显...

Android知识总结

1AppWidget与AndroidWidgetAppWidget是桌面组件的一部分是Home的一个插件AndroidWidget是Android控件的聚合包它提供Android常用的控件如TextViewBu...

android 页面自动跳转、menu使用、Spinner的使用等等知识总结

做星座测试软件的知识总结1页面规定时间的自动跳转1s钟自动跳转也页面finalIntentitnewIntentthisIndexclassIndexclass是要跳转页面的ActivityTimertimer...

问题驱动模式下的Android学习总结 part 01

CryStal1自己在看Marschen的Android视频感觉不错自己也总结了点学习笔记是以视频顺序总结的简单知识点总结感觉如果可以做出下面几个小任务那么视频中的知识点也就没有问题了比较喜欢这种任务问题驱动式...

android的一些知识点

1android单实例运行方法我们都知道Android平台没有任务管理器而内部App维护者一个Activityhistorystack来实现窗口显示和销毁对于常规从快捷方式运行来看都是startActivity...

Android基础知识及专有名词解释

Android基础知识及专有名词解释1Android手机android系统的手机已在市场上销售的非常火爆但是很多普通用户在听到android手机时还都是一头雾水不知道这是什么手机其实简单的说android是一个...

基础知识普及 Android热门名词解释

基础知识普及Android热门名词解释android手机这个全新的产品大家都还处在一个认识和了解的阶段很多普通用户对于大家常提到的一些专业词语都不是很理解完全不知道它们表达的是什么意思以下是android手机最...

android知识点总结(13篇)