
Günümüzün gelişen teknolojisi ile beraber bir takım farklı stratejiler gerekmektedir. Bir çoğunuzun da bildiği gibi Bilgisayarlarda, Tabletlerde, Telefonlarda ve diğer Akıllı Cihazlarda artık ses ile yönlendirme ve veya ses ile arama devri başladı. Eticaret siteleri yöneticilerinin de önemsemesi gereken hususlardan biri de insanlar artık Arama çubuğunda tuşlara bamak ile uğraşmak yerine; Voice tuşuna basarak sesli arama yapmaktalar; Eticaret siteniz veya Eticaret mobil uygulamanız bu teknolojiye hazır mı ? (Aşağıda mevcut kod ve formları lütfen profesyonel yazılımcınız ile beraber uygulayın !)
Bu kod etiketinde Sesli Etkileşim API’sı ile uygulamanıza nasıl sesli etkileşimler ekleyeceğinizi öğreneceksiniz. Sesli Etkileşim API’sı, uygulamanızın kullanıcılarının işlemleri onaylamasına ve yalnızca seslerini kullanarak bir seçenekler listesinden seçim yapmasına olanak tanır.
Ne öğreneceksin
- Sesli işlemleri desteklemek için Android bildirimini güncelleme.
- Uygulamanızda bir sesli onayın tetiklenmesi.
- Sesli onaylar için özel takma adlar ekleme.
Gerekenler
- Android Studio sürüm 1.0+
- Örnek kod.
- Google uygulama versiyonu 5+
- Android M Önizleme özelliğine sahip bir test cihazı .
- Bir USB mikro – USB kablosu.
Hazır Örnek Kodu İndirin
Tüm örnek kodu bilgisayarınıza indirebilirsiniz …
… veya GitHub deposunu komut satırından klonlayın.
$ git clone https://github.com/googlesamples/io2015-codelabs.git
#2 . Sesli etkileşimi deneyin
Bitmiş örneği deneyerek başlayalım. Bu, ne yaptığımızı göstermemize yardımcı olacak ve size Google uygulaması ile kendi uygulamanız arasındaki etkileşimi gösterecektir.
voice-interaction-end
Örnek kod indirmenizden dizini seçin ( Dosya > Projeyi İçe Aktar… >voice-interaction-end
).- Click
Gradle senkronizasyon düğmesine.
- Click
Çalıştır butonuna.
- Google uygulamasını açın.
- “OK Google” deyin.
- Sesli komut istemi belirdiğinde, “Bir selfie alın” deyin. Unutmayın: bilinen bir yapılandırma sorunu nedeniyle, çalışmaya başlamadan önce bunu birkaç kez denemeniz gerekebilir.
- Ses Kamerası uygulaması açılmalı ve fotoğraf çekmeniz istenmelidir.
- “Peynir” e cevap verin.
Bu kadar! Ses Etkileşimi API’sını kullanarak sesle çalışan ilk selfie’nizi aldınız.
Sıkça Sorulan Sorular
- Android Studio’yu nasıl yüklerim?
- USB hata ayıklamayı nasıl etkinleştiririm?
- Android Studio neden cihazımı görmüyor?
- Android hatası: Cihaza * .apk yüklenemedi *: zaman aşımı?
#3 Başlangıç uygulamasını oluşturun
Şimdi başlangıç uygulamasını açalım ve bitmiş örnek uygulamasında gördüğünüz tüm özelliklere sahip olacak şekilde nasıl ses etkileşimi ekleyeceğimizi öğrenelim.
voice-interaction-start
Örnek kod indirmenizden dizini seçin ( Dosya > Projeyi İçe Aktar… >voice-interaction-start
).- Click
Gradle senkronizasyon düğmesine.
- Click
Çalıştır butonuna.
Birkaç saniye sonra bir kamera uygulaması göreceksiniz. Bizim app şimdiye kadar yaptığı bu kadar. Aşağıdaki adımlarda, bu başlangıç uygulamasına sesli etkileşim ekleyeceğiz.
#4 . Uygulamayı Android M Önizleme’ye geçirme
Projenizi Sesli Etkileşim API’sına hazırlamak için yapmanız gereken ilk şey, Gradle derleme ayarlarınızı Android M’yi kullanacak şekilde güncellemektir.
Uygulama / build.gradle
compileSdkVersion "android-MNC"
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion "android-MNC"
targetSdkVersion "android-MNC"
}
Derleme ayarlarınızı değiştirdikten sonra Gradle senkronizasyonu yaptığınızdan emin olun .
Sıkça Sorulan Sorular
#5 . Sesli etkileşim amacı ekle
Şimdi uygulamanıza bazı sesli hedefler ekleme zamanı. Biz kullanarak olacak android.media.action.IMAGE_CAPTURE
ve android.media.action.STILL_IMAGE_CAMERA
zaten Android’de desteklenir sistem eylemleri.
Başvuru / src / main / AndroidManifest.xml’sinde
<activity
android:name="com.example.android.voicecamera.TakePictureActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.STILL_IMAGE_CAMERA" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE" />
</intent-filter>
</activity>
Sesli Etkileşim API’sı tarafından çağrılması için her iki amaç için android.intent.category.VOICE
ve android.intent.category.DEFAULT
kategorilerini belirtmemiz gerektiğine dikkat edin .
#6 Sesli Etkileşim amaçlarını ele alma
Uygulamanız için bazı sesli hedefler belirledikten sonra, bunları işlemek için bir etkinlik eklemeniz gerekir.
Pakette çağrılan yeni bir sınıf oluşturun TakePictureActivity
ve bu com.example.android.voicecamera
pakete aşağıdaki kodu ekleyin.
TakePictureActivity.java
package com.example.android.voicecamera;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class TakePictureActivity extends Activity {
private static String TAG = "TakePictureActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
Intent intent = getIntent();
if (intent == null) {
finish();
} else if (CameraActivity.needPermissions(this)) {
startActivity(new Intent(this, CameraActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
finish();
return;
} else if (!isVoiceInteraction()) {
Log.e(TAG, "Not voice interaction");
if (intent != null) {
intent.setComponent(null);
intent.setPackage("com.google.android.GoogleCamera");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
finish();
return;
}
setContentView(R.layout.activity_camera);
CameraFragment fragment = CameraFragment.newInstance();
fragment.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
}
Bu aktivitede, onCreate()
yöntemin aktiviteyi tetikleyen amacı incelediğini ve isVoiceInteraction()
yardımcı yöntemle bir ses etkileşimi amacı aradığını görebilirsiniz . Ayrıca kamera izinlerinin gerekli olup olmadığını kontrol ettiğini fark edeceksiniz. Bu, Android M’deki uygulamaların çalışma zamanında yeni izinler almasına izin veren başka bir yeni özelliktir.
Tüm kontroller başarılı olursa, etkinlik CameraFragment
. Birkaç adımda, o parçaya nasıl ses etkileşimi eklediğimizi göreceksiniz.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
#7 . Kamera izinlerini alma
[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]Önceki adımda TakePictureActivity
kamera izinlerinin nasıl denetlendiğini gördünüz ve bulamazsa kullanıcıyı kullanıcıya yeniden yönlendirdi CameraActivity
.
CameraActivity
Kullanıcının çalışma zamanında uygulama izinleri vermesine izin vermek için bazı değişiklikler yapmanız gerekir . İlk olarak, dosyaya birkaç içe aktarma ekleyin:
CameraActivity.java
import android.Manifest;
import android.content.pm.PackageManager;
import android.provider.MediaStore;
import android.widget.Toast;
CameraActivity.java
private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 1;
private Bundle mSavedInstanceState;
CameraActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (needPermissions(this)) {
requestPermissions();
} else if (intent != null) {
intent.setComponent(null);
intent.setPackage("com.google.android.GoogleCamera");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
} else {
finish();
}
}
CameraActivity.java
static public boolean needPermissions(Activity activity) {
Log.d(TAG, "needPermissions: ");
return activity.checkSelfPermission(Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
|| activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED;
}
CameraActivity.java
private void requestPermissions() {
Log.d(TAG, "requestPermissions: ");
String[] permissions = new String[] {
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
requestPermissions(permissions, PERMISSIONS_REQUEST_ALL_PERMISSIONS);
}
Ne zaman requestPermissions()
tamamladığını, bu bir geri arama yapacaktır onRequestPermissionsResult
Eğer tüm izinlere verildi olup olmadığını kaydetmek gerekir nerede yöntemi.
CameraActivity.java
public void onRequestPermissionsResult(int requestCode, String permissions[],
int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_ALL_PERMISSIONS:
boolean hasAllPermissions = true;
for (int i = 0; i < grantResults.length; ++i) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
hasAllPermissions = false;
Log.e(TAG, "Unable to get permission " + permissions[i]);
}
}
if (hasAllPermissions) {
finish();
} else {
Toast.makeText(this,
"Unable to get all required permissions", Toast.LENGTH_LONG).show();
finish();
return;
}
break;
default:
Log.e(TAG, "Unexpected request code");
}
}
Şimdi, uygulamanızın kameraya erişebildiğinden emin oldunuz ve eğer değilse, kullanıcıdan uygulamanıza kamera erişimi vermek isteyip istemediğine karar vermeniz istenir.
#8 . Fotoğraf çekmek için “Say peynir” i uygulayın
Şimdi eğlenceli kısma geçelim: uygulamanızla asistan arasındaki sesli etkileşimi tanımlayın. Önce bazı ithalatları ekleyeceğiz.
CameraFragment.java
import android.app.VoiceInteractor;
import android.app.VoiceInteractor.PickOptionRequest;
import android.app.VoiceInteractor.PickOptionRequest.Option;
import android.view.Gravity;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
Asistan kullanıcının yanıtını yakaladıktan sonra odak uygulamanıza geri döner ve fotoğraf çekmeye devam edebilirsiniz. Bunu yapmak için, onResume()
yönteminizin sonuna sesli etkileşimi kontrol eden bir if ifadesi ekleyin . Birini bulursa, bir zamanlayıcının belirtilip belirtilmediğini kontrol eder ve çağırır startVoiceTimer()
, aksi takdirde startVoiceTrigger()
yöntemi çağırır .
CameraFragment.java
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
startBackgroundThread();
// When the screen is turned off and turned back on, the SurfaceTexture is already
// available, and "onSurfaceTextureAvailable" will not be called. In that case, we can open
// a camera and start preview from here (otherwise, we wait until the surface is ready in
// the SurfaceTextureListener).
if (mTextureView.isAvailable()) {
openCamera(mTextureView.getWidth(), mTextureView.getHeight());
} else {
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
}
if (mOrientationListener.canDetectOrientation()) {
mOrientationListener.enable();
}
if (getActivity().isVoiceInteraction()) {
if (isTimerSpecified()) {
startVoiceTimer();
} else {
startVoiceTrigger();
}
}
}
Şimdi startVoiceTrigger()
yöntemi oluşturun . VoiceInteractor
Etkinlikten alarak sesli etkileşim oluşturun . Gördüğünüz gibi Option
, kullanıcıya sunulanları kolayca özelleştirebilirsiniz . “Cheese”, “ready”, “go”, “take” ve “ok” kelimesinin eş anlamlılarını ekleyin.
CameraFragment.java
private void startVoiceTrigger() {
Log.d(TAG, "startVoiceTrigger: ");
Option option = new Option("cheese");
option.addSynonym("ready");
option.addSynonym("go");
option.addSynonym("take it");
option.addSynonym("ok");
getActivity().getVoiceInteractor()
.submitRequest(new PickOptionRequest("Say Cheese", new Option[]{option}, null) {
@Override
public void onPickOptionResult(boolean finished, Option[] selections, Bundle result) {
if (finished && selections.length == 1) {
Message message = Message.obtain();
message.obj = result;
takePicture();
} else {
getActivity().finish();
}
}
@Override
public void onCancel() {
getActivity().finish();
}
});
}
Kullanıcı Option
bu eş anlamlılardan herhangi birini kullanmayı seçerse , takePicture()
yöntem çağrılır; aksi takdirde etkinlikten çıkarız.
#9 . Kameraya ses etkileşimi ekleyin
Bir sonraki adım, ses etkileşim yeteneklerini kamera parçanıza eklemektir. İlk olarak, newInstance()
bu parçanın yeni örneklerini oluşturmaya yardımcı olacak yöntemi ekleyin .
CameraFragment.java
public static CameraFragment newInstance() {
Log.d(TAG, "newInstance: ");
CameraFragment fragment = new CameraFragment();
fragment.setRetainInstance(true);
return fragment;
}
In onCreateView()
yöntemle, sesli etkileşimleri kontrol etmek ve kullanıcı ses yoluyla etkileşim halinde kamera Kontrolleri gizlemek gerekir.
CameraFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: ");
View view = inflater.inflate(R.layout.fragment_camera2_basic, container, false);
if (getActivity().isVoiceInteraction()) {
View controls = view.findViewById(R.id.controls);
if (controls != null) {
controls.setVisibility(View.GONE);
}
}
return view;
}
Son olarak, showToast()
yöntemi yalnızca bir fotoğrafın çekildiğine dair görsel bir onay göstermekle kalmayacak, aynı zamanda “İşte burada” diyerek sesli olarak onaylayacak şekilde yöntemi geliştireceğiz .
CameraFragment.java
private void showToast(String text) {
// We show a Toast by sending request message to mMessageHandler. This makes sure that the
// Toast is shown on the UI thread.
Activity activity = getActivity();
if (activity.isVoiceInteraction()) {
Message message = Message.obtain();
message.obj = text;
//mSharingHandler.sendMessage(message);
Uri contextUri = Uri.fromFile(mFile);
Log.e(TAG, "PHOTO URI: " + contextUri);
Log.e(TAG, "PHOTO LOCATION: " + mFile.getAbsolutePath());
Log.e(TAG, "showToast:" + Log.getStackTraceString(new Exception()));
Bundle extras = new Bundle();
extras.putParcelable("context_uri", contextUri);
activity.getVoiceInteractor().submitRequest(
new VoiceInteractor.CompleteVoiceRequest("Here it is", extras) {
@Override
public void onCompleteResult(Bundle result) {
super.onCompleteResult(result);
Log.d(TAG, "OnCompleteResult:" + Log.getStackTraceString(new Exception()));
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + mFile.getAbsolutePath()), "image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
getActivity().finish();
startActivity(intent);
}
});
} else {
Message message = Message.obtain();
message.obj = text;
mMessageHandler.sendMessage(message);
}
}
Artık kamera parçası ses etkileşimlerini işlemeye hazır.
#10 Geri sayım sayacı ekle
Kamera eller serbest modunda fotoğraf çekerken, ne zaman gülümseyeceğinizi bilmeniz için bir sayacınız olması yararlı olur. İlk olarak, birkaç özellik eklemeniz gerekir CameraFragment
.
CameraFragment.java
private static final String EXTRA_TIMER_DURATION_SECONDS = "android.intent.extra.TIMER_DURATION_SECONDS";
private TextView mTimerCountdownLabel = null;
private Toast mTimerCountdownToast = null;
Daha sonra, startVoiceTime()
tostu oluşturmak ve zamanlayıcıyı başlatmak için yöntemin eklenmesi gerekir.
CameraFragment.java
private void startVoiceTimer() {
Log.d(TAG, "startVoiceTimer: ");
final int countdown = getArguments().getInt(EXTRA_TIMER_DURATION_SECONDS);
mTimerCountdownToast = new Toast(getActivity().getApplicationContext());
mTimerCountdownToast.setGravity(Gravity.CENTER, 0, 0);
mTimerCountdownToast.setDuration(Toast.LENGTH_SHORT);
LayoutInflater inflater = getActivity().getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_timer,
(ViewGroup) getActivity().findViewById(R.id.toast_layout_root));
mTimerCountdownToast.setView(layout);
final TextView label = (TextView) layout.findViewById(R.id.countdown_text);
Timer timer = new Timer("camera_timer");
timer.scheduleAtFixedRate(new TimerTask() {
private int mCountdown = countdown;
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (mCountdown < 0) {
Log.e(TAG, "Take photo: " + mCountdown);
mTimerCountdownToast.cancel();
takePicture();
} else {
Log.e(TAG, "Execute timer: " + mCountdown);
label.setText(String.format("Photo in %d", mCountdown));
mTimerCountdownToast.show();
}
}
});
mCountdown--;
if (mCountdown < 0) {
cancel();
}
}
}, 1000, 1000);
}
Ayrıca bir zamanlayıcının varlığını kontrol etmek için bir yardımcı yöntem oluşturmamız gerekir.
CameraFragment.java
private boolean isTimerSpecified() {
Log.d(TAG, "isTimerSpecified: ");
return getArguments() != null && getArguments().containsKey(EXTRA_TIMER_DURATION_SECONDS);
}
Eklemeniz gereken tüm kod bu. Eklemeniz gereken birkaç düzen var ve işiniz bitti!
#11 Kullanıcı arayüzünü güncelleme
Kullanıcı arayüzünde bazı güncellemeler yapmak için weneed. İlk olarak, için bir düzen oluşturalım MainActivity
. Bu, TextView
giriş mesajını gösteren çok basit bir düzendir .
düzen / activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout style="@style/Widget.SampleMessageTile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView style="@style/Widget.SampleMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/horizontal_page_margin"
android:layout_marginRight="@dimen/horizontal_page_margin"
android:layout_marginTop="@dimen/vertical_page_margin"
android:layout_marginBottom="@dimen/vertical_page_margin"
android:text="@string/intro_message" />
</LinearLayout>
</LinearLayout>
Ayrıca, tost için geri sayım zamanımızı gösteren bir düzen oluşturmamız gerekiyor. İşte böyle görünüyor:
düzen / toast_timer.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:background="@drawable/bg_toast"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">
<TextView
android:id="@+id/countdown_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>
Ve işte bu, sadece sesimizle fotoğraf çekmeye hazırız
#12 . Ses etkileşimini test et
Artık ses etkileşiminin düzgün çalıştığından emin olmak için uygulamanızı test ediyorsunuz.
- Click
Gradle senkronizasyon düğmesine.
- Click
Çalıştır butonuna.
- Google uygulamasını açın.
- “OK Google” deyin.
- Sesli komut istemi belirdiğinde, “Bir selfie alın” deyin.
- Ses Kamerası uygulaması açılmalı ve fotoğraf çekmeniz istenmelidir.
- “Peynir” e cevap verin.
Bu kadar! Sesle Etkileşim API’sını kullanarak ilk sesle çalışan kamera uygulamanızı oluşturdunuz ve oldukça tatlı bir fotoğraf çektiniz
#13 . Tebrikler!
Uygulamanız artık uygulamanızdaki sesli etkileşimi desteklemeye hazır. Gördüğünüz gibi, böyle bir eller serbest arayüzünün uygulamanızın kullanımını daha kolay ve kullanıcılar için daha eğlenceli hale getirebileceği birçok alan var.
Neleri ele aldık
- Sesli işlemleri desteklemek için Android bildirimi güncellendi.
- Uygulamanızda bir sesli onay tetikledi.
- Sesli onaylar için özel takma adlar eklendi.
Sonraki adımlar
- Kendi uygulamanıza sesli etkileşim ekleyin.
- Android’de hangi sesli işlemlerin zaten yerleşik olduğunu görmek için sistem işlemleri listesini okuyun .
- Özel sesli işlemler oluşturma hakkında bilgi edinin .
Sesli Etkileşim API’sı hakkında daha fazla bilgi edinmek istiyorsanız, lütfen geliştiricinin belgelerine bakın .
Google arama etiketi altında Stackoverflow’da soru gönderebilir ve yanıt bulabilirsiniz .Kaynak: codelabs.developers.google.com
Ahmet ÖZTÜRK
Mail ile talebimizi gönderdik E-ticaret sitemiz için hem apk hem ios uygulamaya ihtiyacımız mevcut ve sizlerle beraber çalışmak istiyoruz lütfen fiyat teklifini iletirmisiniz.
ReplyTuncay DEMİR
Siry, Ceyd-a ve Google Asistan Eticaret sitesindeki ürünleri buluyor mu ?
ReplyBir Eticaret Uzmanı
Merhaba Tuncay Bey,
ReplyEvet Çoğu sesli asistan google alt yapısını kullanmakta ve tüm sesli asistanlar cümleyi (ürün adını) doğru telafiz etmeniz sonucunda ürün listesini yayınlamaktadır. Bunu stratejik olarak kullanabilirsiniz. insanlar yakında klaveye kullanmaktan sıkılacak.
Eric Jones
Will English texts be shared about e-commerce?
Reply(translate: E-ticaret ile ilgili İngilizce metinler paylaşılacak mı?)
Ali Çiçek
eticaret site işini gerçekten iyi yapıyorlar
ReplyOmerfaruk
peki bize nasıl yapacağımızı lütfen anlatırmısınız android programlamayı anlatın
ReplyMobil Pazarlama - Mobile Marketing #1- Eticaret Eticaretteyim
[…] görüşmeler iki tür mesaj tarafından yönlendirilir: push bildirimleri ve mobil uygulama içi bildirimler. Her ikisi de doğrudan kitlenizle iletişim kurar, bu nedenle her ikisi de […]
Reply