软件管理(显示系统所有安装软件,系统。用户,并清理)


2.png

写基类的东西
软件管理的主界面

public class SoftmgrActivity extends BaseActivity implements View.OnClickListener{
private CleaeArcView rootView;
private CleaeArcView sdView;
private ProgressBar rootProgress;
private ProgressBar sdProgress;
private TextView rootText;
private TextView sdText;
private TextView tvall;
private TextView tvuser;
private TextView tvsystem;

@Override
protected boolean isShowActionBar() {
    return true;
}

@Override
protected void initData() {
    setTitle("软件管理");
    long rootavailable = MemoryInfoManager.rootavailable();
    long rootlTotal = MemoryInfoManager.rootlTotal();
    long sdtotal = MemoryInfoManager.sdtatal();
    long sdavaiable = MemoryInfoManager.sdavaiable();
    int rootendsweep= (int) (rootlTotal*1.0f/(rootlTotal+sdtotal)*360);
    int sdendsweep= (int) (sdtotal*1.0f/(rootlTotal+sdtotal)*360);
    rootView.setSweepAngle(-rootendsweep);
    rootView.setColor("#3852d2");
    sdView.setSweepAngle(sdendsweep);
    sdView.setColor("#e43b5a");
    int rootpro= (int) ((rootlTotal-rootavailable)*1.0f/rootlTotal*100);
    String roottv = Formatter.formatFileSize(this, (rootlTotal - rootavailable));
    String roottv2 = Formatter.formatFileSize(this, rootlTotal);
    int sdpro= (int) ((sdtotal-sdavaiable)*1.0f/sdtotal*100);
    String sdtv = Formatter.formatFileSize(this, (sdtotal - sdavaiable));
    String sdtv2 = Formatter.formatFileSize(this, sdtotal);
    rootProgress.setProgress(rootpro);
    sdProgress.setProgress(sdpro);
    rootText.setText("内置空间"+roottv+"/"+roottv2);
    sdText.setText("外部空间"+sdtv+"/"+sdtv2);
}

@Override
protected void initView() {
    rootView = getViewById(R.id.myview_softmgr_root);
    sdView = getViewById(R.id.myview_softmgr_sd);
    rootProgress = getViewById(R.id.pb_softmgr_root);
    sdProgress = getViewById(R.id.pb_softmgr_sd);
    rootText = getViewById(R.id.tv_soft_root);
    sdText = getViewById(R.id.tv_soft_sd);
    tvall = getViewById(R.id.tv_soft_all);
    tvuser = getViewById(R.id.tv_soft_user);
    tvsystem = getViewById(R.id.tv_soft_system);
}

@Override
protected int getLayoutId() {
    return R.layout.activity_softmgr;
}

@Override
protected void setListaner() {
    tvall.setOnClickListener(SoftmgrActivity.this);
    tvuser.setOnClickListener(SoftmgrActivity.this);
    tvsystem.setOnClickListener(SoftmgrActivity.this);
}

@Override
public void onClick(View v) {
            Intent intent=new Intent(SoftmgrActivity.this,SoftcleanActivity.class);
            intent.putExtra("id",v.getId());
            startActivity(intent);
}
}

主界面的布局

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

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.gfd.phone.activity.SoftmgrActivity">
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="20dp">
    <com.gfd.phone.view.CleaeArcView
        android:id="@+id/myview_softmgr_root"
        android:layout_width="140dp"
        android:layout_height="140dp" />
    <com.gfd.phone.view.CleaeArcView
        android:id="@+id/myview_softmgr_sd"
        android:layout_width="140dp"
        android:layout_height="140dp" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/myview_softmgr_root"
        android:orientation="vertical"
        android:layout_centerVertical="true"
        android:layout_marginLeft="30dp">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:background="#3852d2"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="手机的内存"
                android:textSize="20dp"
                android:layout_marginLeft="10dp"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/myview_softmgr_in"
            android:orientation="horizontal"
            android:layout_centerVertical="true"

            android:layout_marginTop="10dp">
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:background="#e7cf30"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="外部储存卡"
                android:textSize="20dp"
                android:layout_marginLeft="10dp"/>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="手机内置空间"
    android:textSize="15dp"/>
<ProgressBar
    android:id="@+id/pb_softmgr_root"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="24dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="6dp"
    android:max="100"
    android:progressDrawable="@drawable/progress_bg" />
<TextView
    android:id="@+id/tv_soft_root"
      android:layout_width="wrap_content"
    android:layout_height="wrap_content"
       android:text="已用内存:345M/23G"
      android:textSize="16sp"
      android:layout_marginRight="20dp"
      android:layout_gravity="right" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="手机外置空间"
    android:textSize="15dp"/>
<ProgressBar
    android:id="@+id/pb_softmgr_sd"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="24dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="6dp"
    android:max="100"
    android:progressDrawable="@drawable/progress_bg" />
<TextView
    android:id="@+id/tv_soft_sd"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="已用内存:345M/23G"
    android:textSize="16sp"
    android:layout_marginRight="20dp"
    android:layout_gravity="right" />

<TextView
android:id="@+id/tv_soft_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="所有软件"
android:paddingRight="10dp"
android:textSize="22sp"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:clickable="true"
android:paddingLeft="10dp"
android:drawableRight="@drawable/image_bg_pre"/>
<TextView
    android:id="@+id/tv_soft_user"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="用户软件"
    android:paddingRight="10dp"
    android:textSize="22sp"
    android:layout_marginTop="10dp"
    android:gravity="center_vertical"
    android:clickable="true"
    android:paddingLeft="10dp"
    android:drawableRight="@drawable/image_bg_pre"/>
<TextView
    android:id="@+id/tv_soft_system"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="系统软件"
    android:paddingRight="10dp"
    android:textSize="22sp"
    android:layout_marginTop="10dp"
    android:gravity="center_vertical"
    android:clickable="true"
    android:paddingLeft="10dp"
    android:drawableRight="@drawable/image_bg_pre"/>
 </LinearLayout>

布局中扇形的布局,及自定义控件(com.gfd.phone.view.CleaeArcView)

 public class CleaeArcView extends View {

private RectF rectF;
/** 扫描的角度:决定圆弧的弧长*/
private float sweepAngle = 90;
private Paint mPaint;
/** 状态:0:表示后退 1:前进 */
private int state = 0;
private boolean isRuning;
private int[] back = {5,8,10,12,15,18,12,6};
private int[] go = {8,10,14,18,12,10};
private int indexBack;

public CleaeArcView(Context context) {
    this(context, null);
}

/**
 * 有属性的时候
 */
public CleaeArcView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, 0);
}

/**
 * 有风格的时候
 */
public CleaeArcView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    //初始化操作
    //抗锯齿
    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaint.setTextSize(20);
}

/**
 * 测量
 * @param widthMeasureSpec  :既有测量的大小又有测量的规则
 * @param heightMeasureSpec
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    //获取宽和高的大小
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    rectF = new RectF(0,0,width,height);
    //设置测量的尺寸
    setMeasuredDimension(width,height);

}

/**
 * 测量
 * @param canvas :画布
 */
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //绘制圆弧:1.决定位置矩形 2。起始角度(顺时针是+)(-90:表示从正上方画)
    //3.true :表示扇形 false:圆弧 4.画笔
    canvas.drawArc(rectF,-90, sweepAngle,true,mPaint);
}

/**
 * 开始开始的角度
 * @param toAngle
 */
public void setStartAngle(final int toAngle){
    this.sweepAngle = toAngle;
    postInvalidate();
}
/**
 * 先从当前的状态回到0的位置,然后再从0的位置转到指定的位置
 * @param toAngle
 */
public void setSweepAngle(final int toAngle){
    if(isRuning)return;
    final Timer timer = new Timer(false);
    final TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            switch (state){
                case 0://后退
                    //先归0
                    isRuning = true;
                    sweepAngle -= back[indexBack++];
                    if(indexBack >= back.length){
                        indexBack = back.length - 1;
                    }
                    if(sweepAngle <=0 ){
                        sweepAngle = 0;
                        state = 1;
                    }
                    postInvalidate();//在子线程中刷新UI
                    //开始到指定的位置
                    break;
                case 1://前进
                    sweepAngle += 10;
                    if(sweepAngle >= toAngle){
                        sweepAngle = toAngle;
                        //结束
                        timer.cancel();
                        state = 0;
                        isRuning = false;
                        indexBack = 0;
                    }
                    postInvalidate();
                    break;
            }

        }
    };
    timer.schedule(timerTask,45,45);

}
public  void setColor(String color){
    mPaint.setColor(Color.parseColor(color));//设置画笔的颜色
    invalidate();
}
 }

主界面布局的进度条,在很多情况下是可以复用的

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<!-- 水平进度条背景的样式 -->
<item android:id="@android:id/background">
    <shape android:shape="rectangle">
        <corners android:radius="10dp"/>
        <solid android:color="#b3b1b1"/>
    </shape>
</item>

<!-- 水平进度条表示进度的样式 -->
<item android:id="@android:id/progress">
    <clip><!-- 剪裁-->
        <shape android:shape="rectangle">
            <corners android:radius="10dp"/>
            <solid android:color="#17d4f5"/>
        </shape>
    </clip>

</item>
</layer-list>

软件清理的界面

public class SoftcleanActivity extends BaseActivity {

public SoftAdapter softAdapter;
public ListView mList;
public List<RunInfo> datas=new ArrayList<>();
public List<RunInfo> appInfo;
public static CheckBox mCbAllselect;
public AppRecevise recevise;


@Override
protected boolean isShowActionBar() {
    return true;
}

@Override
protected void initData() {
    softAdapter = new SoftAdapter(datas);
    mList.setAdapter(softAdapter);
    Intent intent=getIntent();
    int id=intent.getIntExtra("id",-1);
    switch (id){
        case R.id.tv_soft_all:
            setTitle("所有软件");
            appInfo = Program.getAppInfo();
            break;
        case R.id.tv_soft_user:
            setTitle("用户软件");
            appInfo = Program.getAppUser();
            break;
        case R.id.tv_soft_system:
            setTitle("系统软件");
            appInfo = Program.getAppSystem();
            break;
    }
    softAdapter.refresh(appInfo);
}

@Override
protected void initView() {
    mList = getViewById(R.id.list_soft);
    mCbAllselect = getViewById(R.id.cb_soft_seclect);
    //广播注册
    recevise = new AppRecevise();
    IntentFilter filter=new IntentFilter(Intent.ACTION_PACKAGE_REMOVED);
    filter.addDataScheme("package");
    registerReceiver(recevise,filter);
}
@Override
protected void setListaner() {
    mCbAllselect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (RunInfo data : datas) {
                data.setIsselect(mCbAllselect.isChecked());
            }
            softAdapter.notifyDataSetChanged();
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(recevise);
}

@Override
protected int getLayoutId() {
    return R.layout.activity_softclean;
}


public void bt_soft_all(View view){
    for (RunInfo data : datas) {
        if (data.isselect()){
            Intent intent=new Intent(Intent.ACTION_DELETE);
            intent.setData(Uri.parse("package:"+data.getPackname()));
            startActivity(intent);
        }
    }

}
//卸载成功
private class AppRecevise extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (id) {
            case R.id.tv_soft_all:
                appInfo = Program.getAppInfo();
                break;
            case R.id.tv_soft_user:
                appInfo = Program.getAppUser();
                break;
            case R.id.tv_soft_system:
                appInfo = Program.getAppSystem();
                break;
        }
        softAdapter.refresh(appInfo);
        mCbAllselect.setChecked(false);
    }
}

}

清理界面的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.gfd.phone.activity.SoftcleanActivity">
<ListView
    android:id="@+id/list_soft"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:orientation="horizontal">
 <CheckBox
     android:id="@+id/cb_soft_seclect"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="center"
     android:layout_marginLeft="10dp"/>
    <Button
        android:id="@+id/bt_item_soft_clean"
        style=""
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        android:text="卸载软件"
        android:textSize="20dp"
        android:background="@drawable/bt_rocket_bg"
        android:onClick="bt_soft_all"/>
</LinearLayout>

</LinearLayout>

获取各种软件的代码

public class Program  {

public static List<RunInfo> runInfoList;
public static List<RunInfo> allUser;
public static List<RunInfo> user;
private static PackageInfo packageInfo;
private static List<RunInfo> allAppInfo;
private static List<RunInfo> allAppuser;
private static List<RunInfo> allAppsystem;

public static List<RunInfo> getAllinfo(){
    ActivityManager am= (ActivityManager) App.appContext.getSystemService(Context.ACTIVITY_SERVICE);
    PackageManager pm= App.appContext.getPackageManager();
    List<ActivityManager.RunningAppProcessInfo> allappinfo = am.getRunningAppProcesses();
    runInfoList = new ArrayList<>();
    allUser= new ArrayList<>();
    user = new ArrayList<>();

        for (ActivityManager.RunningAppProcessInfo appProcessInfo : allappinfo) {
            try{
            //每个进程代表的ID
            int id=appProcessInfo.pid;
            //进程的包名
            String packName=appProcessInfo.processName;
            //进程的级别
            int importance=appProcessInfo.importance;
            //判断是本APP时不显示
            if (packName.equals(App.appContext.getPackageName())){
                continue;
            }
            if (importance>=ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE){
                //得到内存信息
                Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(new int[]{id});
                //得到内存的大小
                long size=memoryInfo[0].getTotalPrivateDirty()*1024;
                //APP的信息
                ApplicationInfo appinfo = pm.getApplicationInfo(packName, 0);
                //APP的图标
                Drawable icon = appinfo.loadIcon(pm);
                //APP的名字
                String appName = appinfo.loadLabel(pm).toString();
                RunInfo runInfo=new RunInfo(appName,icon,packName,size);
                runInfoList.add(runInfo);
                if ((appinfo.flags & appinfo.FLAG_SYSTEM)!=0){
                    allUser.add(runInfo);
                }else {
                     user.add(runInfo);
                }
            }
        }catch (Exception e){
        e.printStackTrace();
    }
        }

    return runInfoList;
}
  public static List<RunInfo> getAllUser(){
   getAllinfo();
return allUser;
  }
   public static  List<RunInfo> getUser(){
  getAllinfo();
return user;
  }
  //删除软件的代码
  public static void killApp(String name){
   ActivityManager am= (ActivityManager)    App.appContext.getSystemService(Context.ACTIVITY_SERVICE);
   am.killBackgroundProcesses(name);
  }

  public static List<RunInfo> getAppInfo(){
   allAppInfo = new ArrayList<>();
   allAppuser = new ArrayList<>();
   allAppsystem = new ArrayList<>();
   PackageManager pm=App.appContext.getPackageManager();
   List<ApplicationInfo> inAlldAppInfo = pm.getInstalledApplications(PackageManager.GET_ACTIVITIES
           | PackageManager.MATCH_UNINSTALLED_PACKAGES);
   for (ApplicationInfo applicationInfo : inAlldAppInfo) {
       Drawable icon = applicationInfo.loadIcon(pm);
       String name = applicationInfo.loadLabel(pm).toString();
       String packName = applicationInfo.packageName;
       try {
           packageInfo = pm.getPackageInfo(packName, 0);
       } catch (PackageManager.NameNotFoundException e) {
           e.printStackTrace();
       }
       String versionName = packageInfo.versionName;
       RunInfo runInfo=new RunInfo(name,icon,packName,versionName);
       allAppInfo.add(runInfo);
       if ((applicationInfo.flags&applicationInfo.FLAG_SYSTEM)!=0){
          allAppuser.add(runInfo);
       }else {
          allAppsystem.add(runInfo);
       }
   }
   return allAppInfo;
    }
  public static List<RunInfo> getAppSystem(){
   getAppInfo();
   return allAppuser;
  }
   public static List<RunInfo> getAppUser(){
    getAppInfo();
    return allAppsystem;
}
}

软件的实例(由于单个截取的,所以有一点没用的,可以不要,也可以要)

public class RunInfo {
String appname;
String packname;
 String versionName;
Drawable icon;
long usemomory;
boolean isselect;

public String getVersionName() {
    return versionName;
}

public void setVersionName(String versionName) {
    this.versionName = versionName;
}

public void isselect(boolean select){
  this.isselect=select;
}

public boolean isselect() {
    return isselect;
}

public void setIsselect(boolean isselect) {
    this.isselect = isselect;
}

public RunInfo(String appname, Drawable icon, String packname, long usemomory){
  this.appname=appname;
    this.icon=icon;
    this.packname=appname;
    this.usemomory=usemomory;
}
public RunInfo(String appname, Drawable icon, String packname, String versionName){
    this.appname=appname;
    this.icon=icon;
    this.packname=packname;
    this.versionName = versionName;

}

public String getAppname() {
    return appname;
}

public void setAppname(String appname) {
    this.appname = appname;
}

public String getPackname() {
    return packname;
}

public void setPackname(String packname) {
    this.packname = packname;
}

public Drawable getIcon() {
    return icon;
}

public void setIcon(Drawable icon) {
    this.icon = icon;
}

public String getUsemomory() {
    String size=Formatter.formatFileSize(App.appContext,usemomory);
    return size;
}

public void setUsemomory(long usemomory) {
    this.usemomory = usemomory;
}
}

软件清理的适配器

 public class SoftAdapter extends BaseAdapter {

private List<RunInfo> datas;

public SoftAdapter(List<RunInfo> datas) {
    this.datas = datas;
}

@Override
public int getCount() {
    return datas==null?0:datas.size();
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.softadapter, null);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    final RunInfo runInfo=datas.get(position);
    holder.ioce.setImageDrawable(runInfo.getIcon());
    holder.select.setChecked(runInfo.isselect());
    holder.tvName.setText(runInfo.getAppname());
    holder.tvversion.setText(runInfo.getVersionName());
    holder.packname.setText(runInfo.getPackname());
    holder.select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            runInfo.setIsselect(isChecked);
            if (!isChecked){
                SoftcleanActivity.mCbAllselect.setChecked(false);
                return;
            }
            for (RunInfo data : datas) {
                if (!data.isselect())
                    return;
            }
            SoftcleanActivity.mCbAllselect.setChecked(true);
        }
    });
    holder.select.setChecked(runInfo.isselect());
    return holder.convertView;
}

public class ViewHolder {

    public ImageView ioce;
    public View convertView;
    public TextView tvName;
    public TextView tvversion;
    public CheckBox select;
    public TextView packname;

    public ViewHolder(View convertView) {

        this.convertView = convertView;
        select = (CheckBox) convertView.findViewById(R.id.cb_item_soft_select);
        ioce = (ImageView) convertView.findViewById(R.id.img_item_soft_ioce);
        tvName = (TextView) convertView.findViewById(R.id.tv_item__soft_name);
        tvversion = (TextView) convertView.findViewById(R.id.tv_tv_item__soft_version);
        packname = (TextView) convertView.findViewById(R.id.tv_tv_item__soft_packname);
    }
}
public  void refresh(List<RunInfo> datas){
    this.datas.clear();
    this.datas.addAll(datas);
    notifyDataSetChanged();
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,387评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 一缕清风挤进窗,探头探脑找琼浆。我问今天什么日,念家乡。 细雨绵绵还在下,微云款款换新装。天气霎时鱼肚白,路韶光。
    木貞ma阅读 256评论 1 1
  • 雨下得平庸无奇。在光污染的温暖下,小型的植物就算是冬天也不会脱枝落叶。雨落在叶上,像轻轻拍打冻僵的小动物。 黄子韬...
    扫文研阅读 429评论 0 0
  • “你能不能不要只看结果?”这是今天中午五年级的男生对我发出的嘶吼。 “我看到的过程就是你在对那个一年级的同学围追堵...
    阿铁姑娘阅读 349评论 0 1