編輯:關於Android編程
一個簡單的應用場景:假如用戶打開Activity以後,按Home鍵,此時Activity 進入-> onPause() -> onStop() 不可見。代碼在此時機發送一個Notification到通知欄。當用戶點擊通知欄的Notification後,又重新onRestart() -> onStart() -> onResume() 切換回原Activity。
package zhangphil.pendingintent; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.util.Log; import android.widget.RemoteViews; import android.widget.TextView; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; public class MainActivity extends Activity { private final int NOTIFICATION_ID = 0xa01; private final int REQUEST_CODE = 0xb01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(this.getClass().getName(),"onCreate()"); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.textView); tv.setText(System.currentTimeMillis() + ""); } @Override protected void onRestart() { super.onRestart(); Log.d(this.getClass().getName(),"onRestart()"); } @Override protected void onStart() { super.onStart(); Log.d(this.getClass().getName(),"onStart()"); } @Override protected void onResume() { super.onResume(); Log.d(this.getClass().getName(),"onResume()"); } //Android設備鎖屏也將進入onStop() @Override protected void onStop() { super.onStop(); Log.d(this.getClass().getName(),"onStop()"); sendNotification(this); } private void sendNotification(Context context) { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( context); // 此處設置的圖標僅用於顯示新提醒時候出現在設備的通知欄 mBuilder.setSmallIcon(R.drawable.ic_launcher); // mBuilder.setContentTitle("通知的標題"); // mBuilder.setContentText("通知的內容"); Notification notification = mBuilder.build(); // 當用戶下來通知欄時候看到的就是RemoteViews中自定義的Notification布局 RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.notification); contentView.setImageViewResource(R.id.image, R.drawable.ic_launcher); contentView.setTextViewText(R.id.title, "標題要長......"); contentView.setTextViewText(R.id.text, "內容要短......"); notification.contentView = contentView; // 發送通知到通知欄時:提示聲音 + 手機震動 + 點亮Android手機呼吸燈。 // 注意!!(提示聲音 + 手機震動)這兩項基本上Android手機均支持。 // 但Android呼吸燈能否點亮則取決於各個手機硬件制造商自家的設置。 notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS; // 點擊notification自動消失 notification.flags = Notification.FLAG_AUTO_CANCEL; // 通知的時間 notification.when = System.currentTimeMillis(); // 需要注意的是,作為選項,此處可以設置MainActivity的啟動模式為singleTop,避免重復新建onCreate()。 Intent intent = new Intent(context, MainActivity.class); // 當用戶點擊通知欄的Notification時候,切換回MainActivity。 PendingIntent pi = PendingIntent.getActivity(context, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); notification.contentIntent = pi; // 發送到手機的通知欄 notificationManager.notify(NOTIFICATION_ID, notification); } }
需要注意的是,默認Android的Activity為標准模式,即每次都new一個新的Activity出來,不是原先的Activity,在本例中,可以觀察到MainActivity中的onCreate()如果不修改啟動模式,則每次本調用每次TextView顯示的時間不同(遞增),所有為了使用原來的Activity、避免重復new一個新的出來,需要:
在AndroidManifest.xml中修改MainActivity啟動模式為:singleTop
notification.xml文件源代碼:
activity_main.xml:
Android 利用ContentProvider獲取聯系人信息。在寫代碼前我們首先看一下運行的效果運行效果如下:點了獲取聯系人就展示如下效果讀取聯系人信息的
本文實例為大家分享了TextView繪制背景的方法,供大家參考,具體內容如下效果:實現流程:1.初始化:對畫筆進行設置mPaintIn = new Paint();mPa
需求:Android 4.4 + okhttp 3.2;非root,在應用層,拿到DNS維度底層數據方案:jni + hook libc.so中DNS關鍵getaddri
好的,我們繼續來了解IPC機制,在上篇我們可能就是把理論的知識寫完了,然後現在基本上是可以實戰了。一.Android中的IPC方式 本節我們開始詳細的分析各中跨進程的方