2014-03-25 2 views
0

나는 MainActivity를 열어 내가 만든 위젯을 두드리는 것만으로 음성 인식의 의도를 직접 시작하려고 노력하지만 아무런 효과가 없습니다. 내가 탭하지 않으면 앱이 열립니다. 이 위젯 클래스에게 있습니다PendingIntent를 통한 응용 프로그램 및 직접 음성 인식

public class MyWidgetProvider extends AppWidgetProvider { 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { 
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
    Intent configIntent = new Intent(context, MainActivity.class); 

    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0); 

    remoteViews.setOnClickPendingIntent(R.id.message_button, configPendingIntent); 
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 

    Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    voiceIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); 
    voiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    voiceIntent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT, configPendingIntent); 
    //updateView(context); 

    } 

} 

매니페스트

<!-- Widget --> 
     <receiver 
      android:icon="@drawable/icon" 
      android:label="IntentProva" 
      android:name=".MyWidgetProvider" > 
      <intent-filter > 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/batterywidgetinfo" /> 
     </receiver> 

그리고 내가 뭔가를 놓친 적이

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

<ImageView 

     android:id="@+id/message_button" 
     android:layout_width="72dp" 
     android:layout_height="72dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/icon" /> 
</LinearLayout> 

레이아웃? 감사합니다

답변

1

당신이 인식기 의도를 시작하지 않았습니다. 다음과 같이 voiceIntent 코드를 MainActivity onCreate ..로 이동하십시오. 당신이 위젯 message_button 클릭하면 그래서, 보류중인 의도 MainActivity가 시작됩니다 당신은 ... 인식기를 시작하고 위젯으로 제공 변경

활동

private int SPEECH_REQUEST= 1000; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    boolean isFromWidget = false; 
    Bundle extras = getIntent().getExtras(); 
    if(extras != null && extras.get("widget") != null) 
    { 
     isFromWidget = Boolean.valueOf(extras.get("widget").toString()); 
    } 
    if(isFromWidget) { 
     Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 

     voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     voiceIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); 
     voiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivityForResult(voiceIntent, SPEECH_REQUEST_CODE); 
    } 
} 
에 결과를 다시 핸들러 수

public class MyWidgetProvider extends AppWidgetProvider { 
@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { 
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
    Intent configIntent = new Intent(context, MainActivity.class); 
    configIntent.putExtra("widget",true); 
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    remoteViews.setOnClickPendingIntent(R.id.message_button, configPendingIntent); 
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
} 
} 

또한 MainActivity 실행 모드를 매니페스트의 singleTop으로 설정해야합니다. 그렇지 않으면 여러 액티비티 인스턴스가 생성되는 것을 볼 수 있습니다.

android:launchMode="singleTop" 
+0

하지만이 방법으로 정상적인 앱을 탭하면 자동으로 시작됩니다. –

+0

위젯에서 대기중인 인 텐트에서 여분의 항목을 전달하면 위젯을 탭할 때만 인식기 인 텐트를 직접 시작하고 싶습니다. configIntent.putExtra ("widget", true); MainActivity에서 getExtras(). get ("widget")이 true인지 확인합니다. – Libin

+0

죄송합니다 MainActivity에 넣어야하는 코드를 보여줄 수 있습니까? if 조건은 –