关于最后

package com.example.admin.tim.Activity;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.speech.asr.SpeechConstant;
import com.example.admin.tim.Http.Asycn;
import com.example.admin.tim.R;

import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by Administrator on 2017/12/9 0009.
 */

public class BaseActivity extends AppCompatActivity{
    EventManager asr;
    String finalResult;
    ProgressBar progressBar;
    TextView content;
    Asycn asycn;
    Toolbar toolbar;
    TextView bottomTextView;
    Button button;
    ImageView imageView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPermission();
    }
    private void initPermission() {
        String permissions[] = {Manifest.permission.RECORD_AUDIO,
                Manifest.permission.ACCESS_NETWORK_STATE,
                Manifest.permission.INTERNET,
                Manifest.permission.READ_PHONE_STATE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };

        ArrayList<String> toApplyList = new ArrayList<String>();

        for (String perm :permissions){
            if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
                toApplyList.add(perm);
                //进入到这里代表没有权限.

            }
        }
        String tmpList[] = new String[toApplyList.size()];
        if (!toApplyList.isEmpty()){
            ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
        }

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // 此处为android 6.0以上动态授权的回调,用户自行实现。
    }
}

package com.example.admin.tim.Activity;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.baidu.speech.EventListener;
import com.baidu.speech.EventManagerFactory;
import com.baidu.speech.asr.SpeechConstant;
import com.example.admin.tim.Adapter.RecyAdapter;
import com.example.admin.tim.Bean.Label;
import com.example.admin.tim.Error.ErrorTranslation;
import com.example.admin.tim.Http.Asycn;
import com.example.admin.tim.R;
import com.example.admin.tim.UI.FingerWaveView;
import com.example.admin.tim.interfacee.PopListener;
import com.example.admin.tim.interfacee.RecycleChangeListener;
import com.example.admin.tim.interfacee.viewChangeListener;
import com.example.admin.tim.voice.RecogResult;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends BaseActivity implements EventListener {
    private RecyclerView recyclerView;
    private RecyAdapter recyAdapter;
    NestedScrollView nestedScrollView;
    private List<Label> list;
    boolean once=false;
    private FingerWaveView fingerWaveView;
    private RecycleChangeListener recycleChangeListener=new RecycleChangeListener() {
        @Override
        public void change(Label l) {
            list.add(l);
            recyAdapter.notifyItemChanged(list.size());
            //Log.e("Lin",l.getText()+":"+l.getLabel());
            //recyclerView.scrollToPosition(recyAdapter.getItemCount()-1);
            Log.d("Lin","recycle"+recyclerView.getHeight());
            Log.d("Lin","recycle"+recyclerView.getLayoutParams().height);
            //recyclerView.smoothScrollToPosition(recyAdapter.getItemCount()-1);
            if (once) {
                once=false;
                nestedScrollView.smoothScrollTo(0,(recyclerView.getHeight()+1000));
                //nestedScrollView.scrollTo(0, recyclerView.getHeight()+1000);
            }
        }
    };
    private com.example.admin.tim.interfacee.viewChangeListener viewChangeListener;
    public void getListener(viewChangeListener viewChangeListener){
        this.viewChangeListener=viewChangeListener;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initView();
        asr= EventManagerFactory.create(this,"asr");
        asr.registerListener(this);
    }
    private void initView() {
        toolbar=(Toolbar)findViewById(R.id.tool);
        setSupportActionBar(toolbar);
        toolbar.setTitle("Vio");
        list=new ArrayList<>();

        nestedScrollView=(NestedScrollView)findViewById(R.id.nest);

        bottomTextView=(TextView)findViewById(R.id.tv_finger_status);
        imageView=(ImageView)findViewById(R.id.iv);
        progressBar=(ProgressBar)findViewById(R.id.pro);
        progressBar.setVisibility(View.GONE);
        imageView.setVisibility(View.GONE);
        bottomTextView.setVisibility(View.GONE);
        fingerWaveView=(FingerWaveView)findViewById(R.id.view_custom);

        content=(TextView)findViewById(R.id.content);
        content.setText("1.可以说出城市名字  比如  北京  会显示天气状况"+"\n"+"2.可以说  热点  显示最近的热点新闻"+
        "\n3.可以说   名言  会随机显示一句名言"+"\n4.可以说   你的星座  比如 天蝎座  会获取星座运势"+"\n5.其他  说其他的会有机器人跟你聊天 ");

        Label label=new Label();
        label.setLabel("in");
        label.setText("dwadwa");
        list.add(label);
        //Log.d("Lin","Lable"+label.getLabel()+label.getText());
        recyclerView=(RecyclerView)findViewById(R.id.recy);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyAdapter=new RecyAdapter(this,list);
        recyclerView.setAdapter(recyAdapter);

        button=(Button)findViewById(R.id.button_send);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                start();
                bottomTextView.setText("请说。。。");
                imageView.setVisibility(View.VISIBLE);
                bottomTextView.setVisibility(View.VISIBLE);
                viewChangeListener.viewStart();
                fingerWaveView.bringToFront();
                bottomTextView.bringToFront();
                imageView.bringToFront();
                button.setClickable(false);
            }
        });
    }

    private void start(){
        Map<String, Object> params = new LinkedHashMap<String, Object>();
        String event = null;
        event = SpeechConstant.ASR_START; // 替换成测试的event
        params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
        params.put(SpeechConstant.VAD, SpeechConstant.VAD_TOUCH);
        //下面这句是长语音
        //params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT,1500);
        //  params.put(SpeechConstant.NLU, "enable");
//         params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT, 800);
//         params.put(SpeechConstant.VAD, SpeechConstant.VAD_DNN);
//          params.put(SpeechConstant.PROP ,20000);
        String json = null; //可以替换成自己的json
        json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
            asr.send(event, json, null, 0, 0);

        Log.d("Lin","asr start");
    }
    private void stop() {
        Log.d("Lin"," asr stop");
        asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
    }

    @Override
    public void onEvent(String s, String s1, byte[] bytes, int i, int i1) {
        if(s.equals(SpeechConstant.CALLBACK_EVENT_ASR_READY)){
            // 引擎就绪,可以说话,一般在收到此事件后通过UI通知用户可以说话了

        }
        if(s.equals(SpeechConstant.CALLBACK_EVENT_ASR_FINISH)){
            // 识别结束.
            Label label=new Label();
            label.setLabel("in");
            label.setText(finalResult);
            recycleChangeListener.change(label);
            once=true;
            String url="https://free-api.heweather.com/s6/weather/now?location="+finalResult+"&key=3c0a78cc87b0428281065a9572dc4a6f";
            asycn=new Asycn(progressBar,url,finalResult,recycleChangeListener);

            imageView.setVisibility(View.GONE);
            bottomTextView.setVisibility(View.GONE);

            progressBar.setVisibility(View.VISIBLE);
            progressBar.bringToFront();
            asycn.execute(url,"weather");

            RecogResult recogResult1 = RecogResult.parseJson(s1);
            if (recogResult1.hasError()) {
                int errorCode = recogResult1.getError();
                int subErrorCode = recogResult1.getSubError();
                String error = "错误代码:" + errorCode + "\n错误信息:" + ErrorTranslation.recogError(errorCode)+
                        "\n具体内容:"+recogResult1.getDesc();
                if (error != null) {
                    Log.e("Lin", error);
                    viewChangeListener.viewEnd();
                    bottomTextView.setText("出现错误请联系程序员");
                    stop();
                }
            }
        }
        if (s.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
            RecogResult recogResult = RecogResult.parseJson(s1);
            //Log.d("Lin",recogResult+"");
            // 临时识别结果, 长语音模式需要从此消息中取出结果
            String[] results = recogResult.getResultsRecognition();
            //Log.d("Lin","result"+results+"");
            finalResult=results[0];
            Log.d("Lin",finalResult);
            stop();
            button.setClickable(true);
            viewChangeListener.viewEnd();
            bottomTextView.setText("识别完成");
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        asr.send(SpeechConstant.ASR_CANCEL, "{}", null, 0, 0);
    }

}

package com.example.admin.tim.Adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.admin.tim.Bean.Label;
import com.example.admin.tim.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/12/9 0009.
 */

public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.My> {
    List<Label> mList=new ArrayList<>();
    Context mContext;
    public RecyAdapter(Context context, List<Label> list){
        this.mList=list;
        Log.d("Lin",list.get(list.size()-1).getText());

        this.mContext=context;
    }

    @Override
    public My onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate;
        inflate = LayoutInflater.from(mContext).inflate(R.layout.right, null);
        Log.d("Lin","inflate"+inflate+"");
        return new My(inflate);
    }

    @Override
    public void onBindViewHolder(My holder, int position) {
        final Label user = this.mList.get(position);
        if (mList.get(position).getLabel().equals("in")){
            holder.rightText.setText(user.getText());
            Log.d("Lin","Text ++"+holder.rightText.getText()+"");
            Log.d("Lin","Text ++"+holder.leftText.getText()+"");
            holder.leftText.setVisibility(View.GONE);
        }else {
            holder.leftText.setText(user.getText());
            Log.d("Lin","Text ++"+holder.leftText.getText()+"");
            holder.rightText.setVisibility(View.GONE);
        }
    }

    @Override
    public int getItemCount() {

        return mList.size();

    }

    class My extends RecyclerView.ViewHolder {
        TextView leftText;
        TextView rightText;
        public My(View itemView) {
            super(itemView);
            rightText=(TextView)itemView.findViewById(R.id.text0);
            leftText=(TextView)itemView.findViewById(R.id.teww);
        }

    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值