当前位置:  编程技术>移动开发
本页文章导读:
    ▪联通电信校园促销加码 对策更隐蔽        联通电信校园促销加码 策略更隐蔽京城高校纷纷进入开学季,三大电信运营商均瞄准这一潜力巨大的市场。记者近日走访了几所京城高校发现,与往年不同的是,今年联通电信在校园营销力.........
    ▪ 另一个语音识别的例证        另一个语音识别的例子        这个例子实现的功能和上衣个基本类似,只不过识别引擎换成了Google自家的识别器了。         讯飞的语音云主要还是在普通话方面的识别,识别英语的话就.........
    ▪ NotePad学习札记二       NotePad学习笔记二根据学习笔记一完成一些代码,贴出来看看: Notepad.java package com.example.notepad; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import android.app.Activity; import androi.........

[1]联通电信校园促销加码 对策更隐蔽
    来源: 互联网  发布时间: 2014-02-18
联通电信校园促销加码 策略更隐蔽

京城高校纷纷进入开学季,三大电信运营商均瞄准这一潜力巨大的市场。记者近日走访了几所京城高校发现,与往年不同的是,今年联通电信在校园营销力度大为增强,移动昔日垄断地位被动摇。

    联通电信强力逆袭

    “今年移动的优惠活动真少,不知道办点什么业务好。”一名传媒大学的大四学生小李说。

    记者也发现,在联通和电信的摊位前围满了前来咨询3G业务的新生。一名研一新生表示,自己是移动老用户,不想换号,但决定再办理一张联通3G卡,上网方便。

    在送礼品方面,移动、联通和电信三家运营商都使出了办卡充值换取自行车、移动硬盘、公交卡、背包、雨伞等赠品的招数。但移动失去往年的大气,“去年充话费就送礼品,今年我想充话费换个自行车,但他们告诉我,必须加办一个不得低于50元的数据业务包。”一名大三老生说。联通的现场促销人员则表示,他们充400元就可送一辆自行车,如果是老用户,还可搭送暖水壶、洗脸盆等用品。

    中国联通的一名现场工作人员说:“今年联通活动做得不错,传媒大学现场一天就办了800多个号,一些以前是移动独占的校园市场,今年我们也做到了平分秋色!”

    北京邮电大学信息经济与竞争力研究中心主任曾剑秋教授表示,今年的校园促销还是比较激烈的,各大运营商会利用各种方法做营销,这也是拓展市场的重头戏。

    营销策略更为隐蔽

    为规避“不能在录取通知书中夹寄手机卡”的规定,今年运营商采用了一些较为隐蔽的营销策略。

    一名传媒大学的女生对记者说,她在收到录取通知书几天后,又收到一封来自北京的快递,其中夹有一张联通手机卡,还有关于开学新生注意事项等说明。后来她发现其他来北京上学的同学都收到类似快递。

    电信则把营销策略主要放在手机方面,记者在北京师范大学开学现场发现,每一名免费师范生均可在电信营业摊点前免费领取一部3G手机。师范新生潘同学说,她的录取通知书里夹着一张单子,填写个人信息后就可以免费领到一部3G手机。

    针对有运营商营销中打规定擦边球的现象,著名电信分析师付亮认为,运营商运用各种办法有针对性营销可以理解,但是学生的个人信息来源是个问题。


    
[2] 另一个语音识别的例证
    来源: 互联网  发布时间: 2014-02-18
另一个语音识别的例子

        这个例子实现的功能和上衣个基本类似,只不过识别引擎换成了Google自家的识别器了。

        讯飞的语音云主要还是在普通话方面的识别,识别英语的话就会比较坑(比如你想语音输入banana基本是不可能),Google可以识别多种语言,英语当然是毫无压力啦。

效果:





        例子中需要注意的一个问题是:startActivity(Intent)和startActivityForResult(Intent,int)的区别使用。

startActivity(Intent) 方法可以用来启动一个新的 activity ,这个 activity 将被放置在 activity 栈的栈顶。这个方法只有一个参数 Intent ,这个参数描述了将被执行的 activity 。
      有时候你希望在一个 activity 结束时得到它返回的结果。举个例子,你可能启动一个 activity 来让用户从通讯簿中选择一个人;当它结束的时候将会返回这个所选择的人。为了得到这个返回的信息,你可以使用 startSubActivity(Intent, int) 这个方法来启动新的 activity ,第二个整形参数将会作为这次调用的识别标记。这个 activity 返回的结果你可以通过 onActivityResult(int, int, String, Bundle) 方法来获得,此方法的第一个参数就是之前调用所使用的识别标记。
      当 activity 退出的时候,它可以调用 setResult(int) 来将数据返回给他的父进程。这个方法必须提供一个结果码,这个结果码可以使标准结果 RESULT_CANCELED, RESULT_OK ,也可以是其他任何从 RESULT_FIRST_USER 开始的自定义值。此外,它还可以返回一段字符串(经常是一段数据的 URL 地址),一个包含它所有希望值的 Bundle 。这些信息都会在父 activity 的回调函数 Activity.onActivityResult() 中出现,并连同最初提供的识别标记一起(此处有些拗口,意思其实就是子activity 返回的内容、返回码、识别标记都将作为参数,按照不同的返回情况来调用父activity 的Activity.onActivityResult() 方法,以实现出现各种返回时父activity 做出响应的处理)。

代码清单:

package com.example.googlevoice;

import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
	private Button btn ;
	private TextView myTextView;
	private static final int REQUEST_CODE = 1;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btn = (Button) this.findViewById(R.id.btn);
        myTextView = (TextView) this.findViewById(R.id.ResultText);
        
        /**
         * 下面是判断当前手机是否支持语音识别功能
         */
        PackageManager pm = getPackageManager();
        List<ResolveInfo> list = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
        if(list.size()!=0)
        {
        	btn.setOnClickListener(this);
        }else{
        	btn.setEnabled(false);
        	btn.setText("当前语音识别设备不可用...");
        }
        
    }

	public void onClick(View v) {
		if(v.getId()==R.id.btn)
		{
			/**
			 * 启动手机内置的语言识别功能
			 */
			Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
			intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,"en-US");  //设置为当前手机的语言类型
			intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请说话,我识别");//出现语言识别界面上面需要显示的提示
			startActivityForResult(intent,REQUEST_CODE);
		}
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		/**
		 * 回调获取从谷歌得到的数据
		 */
		if(requestCode==REQUEST_CODE&&resultCode==RESULT_OK)
		{
			
			List<String> list = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
			//只选取第一个结果显示
			myTextView.setText(list.get(0));
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
	
	
	

}

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/ResultText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ResultText" />



    <LinearLayout
        android:id="@+id/bottom"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="GoogleVoice" />
    </LinearLayout>

</RelativeLayout>


参考资料:http://blog.csdn.net/vipa1888/article/details/7023928



    
[3] NotePad学习札记二
    来源: 互联网  发布时间: 2014-02-18
NotePad学习笔记二

根据学习笔记一完成一些代码,贴出来看看:

Notepad.java

package com.example.notepad;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Environment;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

// TODO: Auto-generated Javadoc
/**
 * The Class Notepad.
 */
public class Notepad extends Activity {

    /** The et. */
    private EditText et;

    /** The Constant RECOGNIZER. */
    private static final int RECOGNIZER = 1001; // Intent返回结果验证码

    /** The filename. */
    private String filename = "新建文档.txt"; // 保存文本时默认文件名

    /** The my dialog edit text. */
    private EditText myDialogEditText;

    public static final String INTENAL_ACTION_1 = "com.example.notpad.Internal_1";

    static Notepad activity = null;

    private BroadcastReceiver bcrIntenal1 = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            String msg = intent.getStringExtra("message");
            // Toast.makeText(context, "动态:" + msg, 0).show();
            try {
                // byteFile.writeToFile(msg);
                save();
                Log.v("msg",
                        "save in temporary file automatic (temp.txt)");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

    public static class LinedEditText extends EditText {
        private Rect mRect;
        private Paint mPaint;

        // This constructor is used by LayoutInflater
        public LinedEditText(Context context, AttributeSet attrs) {
            super(context, attrs);

            // Creates a Rect and a Paint object, and sets the style and color
            // of the Paint object.
            mRect = new Rect();
            mPaint = new Paint();
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setColor(0x800000FF);
        }

        public static Activity getActivity() {
            return activity;
        }

        /**
         * This is called to draw the LinedEditText object
         * 
         * @param canvas The canvas on which the background is drawn.
         */

        @Override
        protected void onDraw(Canvas canvas) {

            // Gets the number of lines of text in the View.
            int count = getLineCount();

            // Gets the global Rect and Paint objects
            Rect r = mRect;
            Paint paint = mPaint;

            /*
             * Draws one line in the rectangle for every line of text in the
             * EditText
             */
            for (int i = 0; i < count; i++) {

                // Gets the baseline coordinates for the current line of text
                int baseline = getLineBounds(i, r);

                /*
                 * Draws a line in the background from the left of the rectangle
                 * to the right, at a vertical position one dip below the
                 * baseline, using the "paint" object for details.
                 */
                canvas.drawLine(r.left, baseline + 1, r.right,
                        baseline + 1, paint);
            }

            // Finishes up by calling the parent method
            super.onDraw(canvas);
        }
    }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et = (EditText) findViewById(R.id.EditText01);
        activity = this;
        // 动态注册广播消息
        registerReceiver(bcrIntenal1, new IntentFilter(
                INTENAL_ACTION_1));
        Intent serviceIntent = new Intent(Notepad.this,
                MyService.class);
        startService(serviceIntent);
    }

    public static Activity getActivity() {
        return activity;
    }

    // public void onStart() {
    // Intent intent = this.getIntent();
    // System.out.println(intent.getStringExtra("data"));
    // et.setText(intent.getStringExtra("data"));
    // }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onResume()
     */
    public void onResume() { // 重写onResume,防止程序stop后编辑内容丢失
        super.onResume();
        registerReceiver(bcrIntenal1, new IntentFilter(
                INTENAL_ACTION_1));
//        try {
//            File file = new File("/mnt/sdcard/Notepad/temp1.txt"); // 读取临时文件,恢复上一次编辑内容
//            RandomAccessFile stream = new RandomAccessFile(file, "rw");
//            String s = stream.readLine();
//            stream.close();
//            et.setText(s);
//        } catch (Exception e) {
//            // TODO: handle exception
//            e.printStackTrace();
//        }

    }

//    public void onStop() {
//        super.onStop();
//        unregisterReceiver(bcrIntenal1);
//    }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onPause()
     */
    public void onPause() { // 编辑内容存入临时文件
        super.onPause();
        unregisterReceiver(bcrIntenal1);
//        File file = new File("/mnt/sdcard/Notepad/temp1.txt");
//        String data = et.getText().toString();
//
//        try {
//
//            RandomAccessFile stream = new RandomAccessFile(file, "rw");
//            stream.writeBytes(data);
//            stream.close();
//        } catch (Exception e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }

    }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
     */
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
     */
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menuItemNew:
                creatNote();
                return true;
            case R.id.menuItemOpen:
                openNote();
                return true;
            case R.id.menuItemSave:
                saveNote();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * Creat note.
     */
    private void creatNote() {
        et.setText("");
    }

    /**
     * Open note.
     */
    private void openNote() {
        Intent list = new Intent(this, OpenNote.class);
        startActivityForResult(list, RECOGNIZER);
    }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onActivityResult(int, int,
     * android.content.Intent)
     */
    protected void onActivityResult(int requestCode, int resultCode,
            Intent data) {
        if (requestCode == RECOGNIZER && resultCode == RESULT_OK) {
            String text = data.getExtras().getString("data");
            et.setText(text);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    private void save() {

        File sdcardDir = Environment
                .getExternalStorageDirectory();
        String path = sdcardDir.getName()
                + "/Notepad";
        File f = new File(path);

        String fileName = path
                + java.io.File.separator
                + "temp.txt";
        java.io.BufferedWriter bw;
        try {
            bw = new java.io.BufferedWriter(
                    new java.io.FileWriter(
                            new java.io.File(fileName)));
            String str = et.getText().toString();
            bw.write(str, 0, str.length());
            bw.newLine();
            bw.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }

    /**
     * Save note.
     */
    private void saveNote() {
        LayoutInflater factory = LayoutInflater.from(this);
        final View textEntryView = factory.inflate(
                R.layout.save_dialog, null);
        Builder builder = new AlertDialog.Builder(Notepad.this);
        builder.setView(textEntryView);
        myDialogEditText = (EditText) textEntryView
                .findViewById(R.id.myDialogEditText);
        myDialogEditText.setText(filename);
        builder.setTitle("保存");
        builder.setPositiveButton(R.string.str_alert_ok,
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog,
                            int which) {
                        // TODO Auto-generated method stub
                        File sdcardDir = Environment
                                .getExternalStorageDirectory();
                        String path = sdcardDir.getName()
                                + "/Notepad";
                        File f = new File(path);
                        File[] files = f.listFiles();
                        filename = myDialogEditText.getText()
                                .toString();
                        for (int i = 0; i < files.length; i++) { // 存在同名文件
                            File file = files[i];
                            // Log.v("name", file.getName().toString());
                            if (file.getName().toString()
                                    .equals(filename)) {
                                new AlertDialog.Builder(Notepad.this)
                                        .setTitle("文件名重复,请重新输入")
                                        .setPositiveButton("OK", null)
                                        .show();
                            }
                        }
                        String fileName = path
                                + java.io.File.separator
                                + myDialogEditText.getText()
                                        .toString();
                        java.io.BufferedWriter bw;
                        try {
                            bw = new java.io.BufferedWriter(
                                    new java.io.FileWriter(
                                            new java.io.File(fileName)));
                            String str = et.getText().toString();
                            bw.write(str, 0, str.length());
                            bw.newLine();
                            bw.close();
                        } catch (Exception e) {
                            // TODO: handle exception
                            e.printStackTrace();
                        }
                    }
                });
        builder.setNegativeButton(R.string.str_alert_cancel, null);
        builder.show();

    }
}
OpenNote.java

package com.example.notepad;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

// TODO: Auto-generated Javadoc
/**
 * The Class OpenNote.
 */
public class OpenNote extends Activity {
    /** Called when the activity is first created. */
    private ListView listview;
    
    /** The items. */
    private ArrayList<String> items = null;
    
    /** The paths. */
    private ArrayList<String> paths = null;
    
    /** The root path. */
    private String rootPath = "/"; // 根目录
    
    /** The m path. */
    private TextView mPath; // 当前路径
    
    /** The currentpath. */
    String currentpath;
    
    /** The list items. */
    private List<Map<String, Object>> listItems = null;

    /* (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.open_note);
        init();
        getFileDir(rootPath);
    }

    /**
     * Gets the file dir.
     *
     * @param filePath the file path
     * @return the file dir
     */
    private void getFileDir(String filePath) {
        mPath.setText("当前目录:" + filePath);
        currentpath = filePath;
        List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
        items = new ArrayList<String>();
        paths = new ArrayList<String>();
        File f = new File(filePath);
        File[] files = f.listFiles();
        Map<String, Object> listItem = new HashMap<String, Object>();

        if (!filePath.equals(rootPath)) {
            items.add("cd /");
            paths.add(rootPath);
            items.add("cd ..");
            paths.add(f.getParent());
            listItem.put("header", R.drawable.back01);
            listItem.put("name", "cd /");
            listItems.add(listItem);
            Map<String, Object> listItem1 = new HashMap<String, Object>();
            listItem1.put("header", R.drawable.back02);
            listItem1.put("name", "cd ..");
            listItems.add(listItem1);
        }

        for (int i = 0; i < files.length; i++) {
            Map<String, Object> listItem2 = new HashMap<String, Object>();
            File file = files[i];
            items.add(file.getName());
            paths.add(file.getPath());

            if (file.isDirectory()) {
                listItem2.put("header", R.drawable.folder);
            }
            else {
                String pathStr = file.getAbsolutePath();
                if (pathStr
                        .matches("[^\\S]+(\\.avi|\\.mp4|\\.rmvb)$")) {
                    listItem2.put("header", R.drawable.video);
                } else if (pathStr.matches("[^\\S]+(\\.asv|\\.mp3)$")) {
                    listItem2.put("header", R.drawable.audio);
                } else if (pathStr
                        .matches("[^\\S]+(\\.jpg|\\.png|\\.gif)$")) {
                    listItem2.put("header", R.drawable.image);
                } else {
                    listItem2.put("header", R.drawable.doc);
                }
            }
            listItem2.put("name", file.getName());
            listItems.add(listItem2);
        }

        String[] from = {
                "header", "name"
        };
        int[] to = {
                R.id.header, R.id.name
        };
        SimpleAdapter adapter = new SimpleAdapter(this, listItems,
                R.layout.file_row, from, to);
        listview.setAdapter(adapter);

    }

    /**
     * Inits the.
     */
    public void init() {
        listview = (ListView) findViewById(R.id.file_listview);
        mPath = (TextView) findViewById(R.id.current_path);
        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position,
                    long id) {
                File file = new File(paths.get(position));
                if (file.canRead()) {
                    if (file.isDirectory()) {
                        getFileDir(paths.get(position));
                    }
                    else {
                        String data = "fail";
                        try {
                            FileInputStream stream = new FileInputStream(
                                    paths.get(position));
                            StringBuffer sb = new StringBuffer();
                            int c;
                            while ((c = stream.read()) != -1) {
                                sb.append((char) c);
                            }
                            stream.close();
                            data = sb.toString();
                        } catch (Exception e) {
                            // TODO: handle exception
                            e.printStackTrace();
                        }
                        Intent i = getIntent();
                        i.putExtra("data", data);
                        setResult(RESULT_OK, i);
                        finish();

                    }
                } else {
                    Toast toast = Toast.makeText(OpenNote.this,
                            "您的权限不足!", Toast.LENGTH_LONG);
                    toast.show();
                }

            }
        });
    }

    /* (non-Javadoc)
     * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == event.KEYCODE_BACK) {
            if (currentpath == rootPath) {
                File f = new File(currentpath);
                getFileDir(currentpath);
            }
            else {
                File f = new File(currentpath);
                getFileDir(f.getParent());
            }

        }
        return super.onKeyDown(keyCode, event);
    }

}




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,