码迷,mamicode.com
首页 > 其他好文 > 详细

cc_美团之自定义升级通知

时间:2015-07-14 06:19:16      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:美团 自定义通知 ;自定义toast

技术分享


一.片段代码:

package com.chencheng.meituan.fragment;


import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.SocketTimeoutException;

import java.net.URL;


import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Context;

import android.content.Intent;

import android.graphics.Color;

import android.graphics.drawable.ColorDrawable;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Bundle;

import android.os.Environment;

import android.support.v4.app.DialogFragment;

import android.support.v4.app.NotificationCompat;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.RemoteViews;

import android.widget.TextView;


import com.chencheng.utils.ToastUtil;

import com.chencheng.utils.upgrade.VersionInfo;

import com.yuchen.meituan.MainActivity;

import com.yuchen.meituan.R;

/**

 * A simple {@link android.support.v4.app.Fragment} subclass.

 * 

 */

public class UpgradeDialogFragment extends DialogFragment implements

OnClickListener {


private static final String APK_UPGRADE = Environment

.getExternalStorageDirectory() + "/lashou/upgrade/upgrade.apk";


private static final int NOTIFY_ID = 12345;

private NotificationManager mNotifyMgr;

private RemoteViews views;

private Notification nofity;

// private FragmentActivity mActivity;

private VersionInfo verInfo;

private TextView mTvContent;


private MainActivity mActivity;


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

mActivity = (MainActivity) getActivity();

View inflate = inflater.inflate(R.layout.fragment_dialog_upgrade, null);

mTvContent = (TextView) inflate.findViewById(R.id.tv_content);

inflate.findViewById(R.id.tv_cancle).setOnClickListener(this);

inflate.findViewById(R.id.tv_ok).setOnClickListener(this);

getDialog().getWindow().setBackgroundDrawable(

new ColorDrawable(Color.TRANSPARENT));

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

mTvContent.setText(verInfo.featrue);

return inflate;

}


@Override

public void onClick(View v) {

dismiss();

switch (v.getId()) {

case R.id.tv_ok:

ToastUtil.showToast(mActivity, "确定");

// NotifiUtils.showToast(mActivity, "确定");

break;

default:

break;

}

}


class UpgradeTask extends AsyncTask<String, Integer, String> {

private static final int TIME_OUT = 25000;


@Override

protected void onPreExecute() {

showNotify();

}


protected String doInBackground(String... params) {

InputStream is = null;

FileOutputStream fos = null;

try {

URL url = new URL(params[0]);

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

// conn.getContentLength()// 注意,虚拟地址不能使用这个方法获得文件大小

// 为http请求设置超时时间

conn.setConnectTimeout(TIME_OUT);

conn.setReadTimeout(TIME_OUT);

if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {

ToastUtil.showToast(mActivity, "服务端正在维护");

// NotifiUtils.showToast(mActivity, "服务端正在维护");

return null;

}

is = conn.getInputStream();

// conn.getContentLength()

File upgradeApk = new File(APK_UPGRADE);

if (!upgradeApk.exists()) {

upgradeApk.getParentFile().mkdirs();

}

fos = new FileOutputStream(upgradeApk);

byte[] buffer = new byte[1024];

int loaded = 0;

int len = 0;

int times = 0;

while (-1 != (len = is.read(buffer))) {

fos.write(buffer, 0, len);

// 每7%更新一次

loaded += len;

int percent = loaded * 100 / verInfo.file_len;

if (percent >= 7 * times) {

times++;

publishProgress(loaded);

}

}

fos.flush();

} catch (SocketTimeoutException e) {

// 处理超时事件

} catch (MalformedURLException e) {

} catch (IOException e) {

} finally {

if (is != null) {

try {

is.close();

} catch (IOException e) {

}

}

if (fos != null) {

try {

fos.close();

} catch (IOException e) {

}

}

}

return null;

}


@Override

protected void onProgressUpdate(Integer... values) {

updateNotify(values[0]);

}


protected void onPostExecute(String result) {

// 提示安装apk

ToastUtil.showToast(mActivity, "下载完成,请点击通知安装");

// NotifiUtils.showToast(mActivity, "下载完成,请点击通知安装");

finishNotify();

}

}


protected void upgrade() {

UpgradeTask task = new UpgradeTask();

task.execute(verInfo.apk_url);

}


public void setVersionInfo(VersionInfo verInfo) {

this.verInfo = verInfo;

}


private void showNotify() {

mNotifyMgr = (NotificationManager) getActivity().getSystemService(

Context.NOTIFICATION_SERVICE);


Intent intent = new Intent();

PendingIntent contentIntent = PendingIntent.getActivity(getActivity(),

0, intent, 0);

views = new RemoteViews(getActivity().getPackageName(),

R.layout.custom_notify);

views.setTextViewText(R.id.textView1, "准备下载");

views.setProgressBar(R.id.progressBar1, 10, 0, false);

nofity = new NotificationCompat.Builder(getActivity())

.setSmallIcon(R.drawable.ic_action_home)

.setTicker("美一次")

.setWhen(System.currentTimeMillis())

// .setContentTitle("contentTitle")

// .setContentText("contentText")

.setAutoCancel(true).setContent(views)

.setContentIntent(contentIntent).build();

mNotifyMgr.notify(NOTIFY_ID, nofity);


}


private void updateNotify(int currLen) {

views.setTextViewText(R.id.textView1, currLen * 100 / verInfo.file_len

+ "%");

views.setProgressBar(R.id.progressBar1, verInfo.file_len, currLen,

false);

mNotifyMgr.notify(NOTIFY_ID, nofity);

}


private void finishNotify() {

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(new File(APK_UPGRADE)),

"application/vnd.android.package-archive");

PendingIntent contentIntent = PendingIntent.getActivity(mActivity, 0,

intent, 0);

nofity.contentIntent = contentIntent;

views.setTextViewText(R.id.textView1, "下载完成,点击更新");

// views.setImageViewResource(R.id.imageView1,

// android.R.drawable.ic_media_next);

views.setViewVisibility(R.id.progressBar1, View.INVISIBLE);

mNotifyMgr.notify(NOTIFY_ID, nofity);

}

}



一。二布局代码:


<?xml version="1.0" encoding="utf-8"?>

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

    android:layout_width="match_parent"

    android:layout_height="match_parent" >


    <RelativeLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:layout_marginBottom="200dp"

        android:layout_marginLeft="20dp"

        android:layout_marginRight="20dp"

        android:layout_marginTop="50dp"

        android:background="@drawable/bg_upgrade_dialog" >


        <RelativeLayout

            android:id="@+id/layout_top"

            android:layout_width="match_parent"

            android:layout_height="50dp" >


            <TextView

                android:id="@+id/tv_title"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_centerHorizontal="true"

                android:layout_centerVertical="true"

                android:text="检测到新版本"

                android:textSize="16sp" />

        </RelativeLayout>


        <TextView

            android:id="@+id/textView1"

            android:layout_width="match_parent"

            android:layout_height="1dp"

            android:layout_alignParentLeft="true"

            android:layout_below="@+id/layout_top"

            android:background="@color/bg_common_gray" />


        <TextView

            android:id="@+id/tv_content"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:layout_above="@+id/TextView01"

            android:layout_alignParentLeft="true"

            android:layout_below="@+id/textView1"

            android:layout_marginBottom="10dp"

            android:layout_marginLeft="20dp"

            android:layout_marginRight="20dp"

            android:layout_marginTop="10dp"

            android:text="Medium Text"

            android:textSize="16sp" />


        <LinearLayout

            android:id="@+id/layout_bottom"

            android:layout_width="match_parent"

            android:layout_height="50dp"

            android:layout_alignParentBottom="true"

            android:layout_centerHorizontal="true"

            android:orientation="horizontal" >


            <TextView

                android:id="@+id/tv_cancle"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:layout_weight="1"

                android:gravity="center"

                android:text="忽略"

                android:textColor="@color/textColor_5b"

                android:textSize="18sp" />


            <TextView

                android:id="@+id/TextView02"

                android:layout_width="1dp"

                android:layout_height="match_parent"

                android:background="@color/bg_common_gray" />


            <TextView

                android:id="@+id/tv_ok"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:layout_weight="1"

                android:gravity="center"

                android:text="立即升级"

                android:textColor="@color/green"

                android:textSize="18sp" />

        </LinearLayout>


        <TextView

            android:id="@+id/TextView01"

            android:layout_width="match_parent"

            android:layout_height="1dp"

            android:layout_above="@+id/layout_bottom"

            android:layout_alignParentLeft="true"

            android:background="@color/bg_common_gray" />

    </RelativeLayout>


二。自定义Toast 


技术分享


二。一 自定义Toast类代码:


package com.chencheng.utils;


import android.content.Context;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;


import com.yuchen.meituan.R;



public class ToastUtil {

private static Toast toast;


public static void showToast(Context context, String text) {

// Toast toast = Toast.makeText(this, "toast", Toast.LENGTH_LONG);

// 如果之前有任务,就取消

if (toast != null) {

toast.cancel();

}

toast = new Toast(context);

View view = LayoutInflater.from(context).inflate(R.layout.toast_custom,

null);

TextView tvText = (TextView) view.findViewById(R.id.tv_content);

tvText.setText(text);

// toast.setBackground();

toast.setView(view);

toast.setGravity(Gravity.BOTTOM, 0, 100);

toast.setDuration(Toast.LENGTH_SHORT);

toast.show();

}


private ToastUtil() {

}

}

二.二


布局文件


<?xml version="1.0" encoding="utf-8"?>

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

    android:layout_width="match_parent"

    android:layout_height="match_parent" >


    <RelativeLayout

        android:id="@+id/layout_bg"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:padding="5dp"

        android:background="@color/green">


        <TextView

            android:id="@+id/tv_content"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_centerHorizontal="true"

            android:layout_centerVertical="true"

            android:text="Medium Text"

            android:textColor="#ffffff"

            android:textSize="15sp" />

    </RelativeLayout>


</RelativeLayout>


cc_美团之自定义升级通知

标签:美团 自定义通知 ;自定义toast

原文地址:http://1137907860.blog.51cto.com/10452906/1673945

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!