我不知道为什么我的安卓应用程序总是崩溃



我正在构建一个语音识别应用程序,当我说出一个特定的单词(例如"打开"(时,它会执行某些操作,它会打开某些内容等,但问题是当我在手机(真实设备(上运行它并点击说话按钮时,我的应用程序不断崩溃。我不知道还能做什么?我尝试授予它互联网和语音识别权限,但仍然没有帮助

这是Java中的代码(Android Studio(

public class MainActivity extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
private TextView resultText;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button speakButton = (Button) findViewById(R.id.SpeakButton);
speakButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
startVoiceRecognitionActivity();
}
});
}
void startVoiceRecognitionActivity(){
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
@Override
protected void onActivityResult (int requestCode,int resultCode, Intent data){
String wordStr = null;
String[] words = null;
String firstWord = null;
String secondWord = null;
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)
{
ArrayList<String> matches = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
wordStr = matches.get(0);
words = wordStr.split(" ");
firstWord = words[0];
secondWord = words[1];
}
if (firstWord.equals("open"))
{
resultText = (TextView)findViewById(R.id.ResultText);
resultText.setText("Results: Open Command Works");
}
}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.starlinginteractivesoftworks.musiccompanion">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

我看了看日志,上面写着:

08-07 20:12:57.813 14350-14350/?E/BoostFramework: BoostFramework(( : Exception_1 = java.lang.ClassNotFoundException: 未找到类 路径上的"com.qualcomm.qti.Performance": DexPathList[[],nativeLibraryDirectory=[/system/lib64,/vendor/lib64]] 08-07 20:12:58.509 14350-14350/com.starlinginteractivesoftworks.musiccompanion E/Android运行时:致命异常:main 进程: com.starlinginteractivesoftworks.musiccompanion, PID: 14350 android.content.ActivityNotFoundException:未找到要处理的活动 意图 { 行动=android.speech.action.RECOGNIZE_SPEECH launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } (有 额外内容( } 在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1839( 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1531( at android.app.Activity.startActivityForResult(Activity.java:4399( at android.app.Activity.startActivityForResult(Activity.java:4358( 在 com.starlinginteractivesoftworks.musiccompanion.MainActivity.startVoiceRecognitionActivity(MainActivity.java:55( 在 com.starlinginteractivesoftworks.musiccompanion.MainActivity$1.onClick(MainActivity.java:43( at android.view.View.performClick(View.java:6205( at android.widget.TextView.performClick(TextView.java:11103( at android.view.View$PerformClick.run(View.java:23653( at android.os.Handler.handleCallback(Handler.java:751( at android.os.Handler.dispatchMessage(Handler.java:95( at android.os.Looper.loop(Looper.java:154( at android.app.ActivityThread.main(ActivityThread.java:6682( at java.lang.reflect.Method.invoke(Native Method( 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520( at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410(

boost框架日志只是一个警告,不用担心。真正的问题是

ActivityNotFoundException:未找到处理意向的活动

它可以来自:

  • 连接性差
  • 手机上缺少语音应用

可能的解决方案

确保已安装识别应用(有关详细信息,请参阅活动未发现异常:未找到处理意向的活动 (RECOGNIZE_SPEECH( (。

尝试启用脱机模式,如下所述:

  1. 在您的设备上,转到设置 ->语言和输入。点击谷歌语音输入上的图标。
  2. 在"全部"选项卡下,选择要下载的语言。
  3. 下载语言包后,您可以在"已安装"选项卡下看到它。

解决方法

捕获异常并打开 Web 视图以下载识别应用:

try{
...
}
catch(ActivityNotFoundException e) {
Intent i = new Intent(Intent.ACTION_VIEW,            
Uri.parse("https://market.android.com/details?id=APP_PACKAGE_NAME"));
startActivity(i);
}

在开始活动之前检查识别应用是否可用(请参阅 https://stackoverflow.com/a/35290037/2667536(:

PackageManager manager = context.getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
//Then there is application can handle your intent
}else{
//No Application can handle your intent
}

最新更新