android tv 实现弹出通知
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                android tv 实现弹出通知
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                谷歌官方文檔已經說了,Android TV要給用戶展現的是沉浸式的體驗,不希望過多被干擾,所以,普通的Notification是無效的。
 思路:一個透明的Activity+自定義Dialog實現類似彈出通知的效果。
 先上效果圖:
 
 styles.xml
MainActivity.java:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);startService(new Intent(this, NotificationService.class));} }NotificationService.java
public class NotificationService extends Service {@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// 模擬15秒之后通知到來new Handler().postDelayed(new Runnable() {@Overridepublic void run() {startActivity();}}, 15000);return super.onStartCommand(intent, flags, startId);}/*** 彈出通知*/private void startActivity() {Intent intent = new Intent(this, NotificationActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);} }NotificationActivity.java
public class NotificationActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_notification);showNotification();new Handler().postDelayed(new Runnable() {@Overridepublic void run() {if (!NotificationActivity.this.isDestroyed()) {// 延遲10秒關閉彈窗NotificationActivity.this.finish();}}}, 10000);}private void showNotification() {AlertDialog dialog = new AlertDialog.Builder(this).create();Window dialogWindow = dialog.getWindow();if (dialogWindow != null) {dialogWindow.setBackgroundDrawable(new ColorDrawable());}dialog.show();dialog.setContentView(R.layout.layout_dialog);// 設置window typedialog.setCanceledOnTouchOutside(true);if (dialogWindow != null) {WindowManager.LayoutParams lp = dialogWindow.getAttributes();dialogWindow.setGravity(Gravity.CENTER | Gravity.TOP);DisplayMetrics displayMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);lp.width = (int) (displayMetrics.widthPixels * 0.8); // 寬度lp.height = (displayMetrics.heightPixels / 3); // 高度//lp.x = (int) (100 * 0.15); // 新位置X坐標lp.y = (int) (displayMetrics.heightPixels * 0.05); // 新位置Y坐標//lp.alpha = 0.7f; // 透明度dialogWindow.setAttributes(lp);}} }shape_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="3dp"/><solid android:color="#33688698"/> </shape>activity_notification.xml:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"/>layout_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:gravity="center_vertical"android:padding="10dp"android:background="@drawable/shape_dialog"><ImageViewandroid:layout_width="@android:dimen/notification_large_icon_width"android:layout_height="@android:dimen/notification_large_icon_height"android:src="@mipmap/ic_launcher"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:textColor="@android:color/white"android:text="我是通知的詳細內容我是通知的詳細內容我是通知的詳細內容我是通知的詳細內容我是通知的詳細內容"/> </LinearLayout>清單文件:
<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".NotificationActivity"android:theme="@style/translucent"/><service android:name=".NotificationService"/>總結
以上是生活随笔為你收集整理的android tv 实现弹出通知的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 深入浅出Docker 读书笔记(九)
 - 下一篇: 中国六大茶类基本知