免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

ANDROID語音資料

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

import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.database.Cursor;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity
{
  private TextView TextView01;
  private Button Button01;
  public static final int VOICE_RECOGNITION_REQUEST_CODE = 0x1008;
  private static final int PICK_CONTACT_SUBACTIVITY = 2;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TextView01 = (TextView) this.findViewById(R.id.TextView01);
    Button01 = (Button) this.findViewById(R.id.Button01);
    Button01.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View v)
      {
        // TODO Auto-generated method stub
        /*建構Uri來取得聯絡人的資源位置*/
       // Uri uri = Uri.parse("content://contacts/people/");
        /*透過Intent來取得聯絡人資料並回傳所選的值*/
        //Intent intent = new Intent(Intent.ACTION_PICK, uri);
        /*開啟新的Activity並期望該Activity回傳值*/
        //startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);
        
        startActivityForResult(new Intent(Intent.ACTION_PICK,
            android.provider.ContactsContract.Contacts.CONTENT_URI),PICK_CONTACT_SUBACTIVITY);
      }
    });
   

    Button01.setOnClickListener(new Button.OnClickListener()
    {

      @Override
      public void onClick(View v)
      {
        // TODO Auto-generated method stub
        PackageManager pm = getPackageManager();
        /* 查詢有無裝Google Voice Search Engine */
        List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
            RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
        /* 若有安裝Google Voice Search Engine */
        if (activities.size() != 0)
        {
          try
          {
            /* 語音辨識Intent */
            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            /* 在辨識畫面出現的說明 */
            intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "語音辨識");
            /* 開啟語音辨識Intent */
            startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

          } catch (Exception e)
          {
            TextView01.setText("" + e.getMessage());
            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG)
                .show();
          }

        } else
        {
          TextView01.setText("RecognizerIntent NOT Found!");
          Toast.makeText(MainActivity.this, "RecognizerIntent NOT Found!",
              Toast.LENGTH_LONG).show();
        }
      }

    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    // TODO Auto-generated method stub
    switch (requestCode)
    {
      case VOICE_RECOGNITION_REQUEST_CODE:
        final Uri uriRet = data.getData();
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE
            && resultCode == RESULT_OK)
        {
          Cursor c = managedQuery(uriRet, null, null, null, null);
          /*將Cursor移到資料最前端*/
          c.moveToFirst();
          String strRet = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
          int contactId = c.getInt(c.getColumnIndex(ContactsContract.Contacts._ID));
          Cursor phones = getContentResolver().query ( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
              ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null );
          /* 取得辨識結果 */
          ArrayList<String> results = data
              .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
          for (int i = 0; i < results.size(); i++)
          {
            strRet += results.get(i);
          }

          if (strRet.length() > 0)
          {
            TextView01.setText(strRet);
            Toast.makeText(MainActivity.this, strRet, Toast.LENGTH_LONG).show();
                  
            /* 開啟google搜尋 */
            Uri uri = Uri.parse("content://contacts/people"+strRet);
            Intent search = new Intent(Intent.ACTION_PICK,uri);
            search.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            /* 放入搜尋字串 */
            search.putExtra(SearchManager.QUERY, strRet);
            final Bundle appData = getIntent().getBundleExtra(
                SearchManager.APP_DATA);
            if (appData != null)
            {
              search.putExtra(SearchManager.APP_DATA, appData);
            }
            startActivity(search);

          } else
          {
            TextView01.setText("Can not recognize...");
            Toast.makeText(MainActivity.this, "Can not recognize...",
                Toast.LENGTH_LONG).show();
          }
        }
        break;
    }
    super.onActivityResult(requestCode, resultCode, data);
  }

}
返回列表