【问题标题】:why is warning "cannot resolve symbol"- "intent"为什么警告“无法解析符号”-“意图”
【发布时间】:2018-08-06 05:25:30
【问题描述】:

我正在尝试“破坏”“ACTION_RECOGNIZE_SPEECH”意图...

public  void getSpeech(View view){

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

...

@Override
public void onDestroy() {
    // prevent memory leaks when activity is destroyed
    ....stopListening();
    ....cancel();
    intent.destroy();
    intent. getInstance().shutdown();
    super.onDestroy();

【问题讨论】:

  • 你想做什么?不保证会调用 onDestroy()。如果您需要在应用程序置于后台时进行一些清理,请根据您的目标 Api 在 onStop 或 onPause 中进行。

标签: android android-intent symbols destroy speech


【解决方案1】:

您一直在 getSpeech(View view) 方法中本地声明您的 intent 变量。您应该在全局范围内声明您的变量。

public class YourClass {
  Intent intent = null;
  ...
}

getSpeech(View view)方法内,

intent = new Intent(...);

onDestory()方法内部,

if (intent != null) {
  intent.destroy();
  intent.getInstance().shutdown();
}

【讨论】:

    【解决方案2】:

    intent 对象是在方法内部创建的,这意味着方法何时完成执行。默认情况下,在该方法中创建的本地成员将被垃圾收集。

    【讨论】:

      【解决方案3】:

      您应该将 intent 设置为 Activity 中的字段,而不是在方法中本地设置。这样做:

      public class MyActivity extends Activity {
          private Intent intent;
      
          @Override
          public void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
              // Create your view, etc.
          }
      
          public  void getSpeech(View view){
              intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
          }
      
          @Override
          public void onDestroy() {
              // prevent memory leaks when activity is destroyed
              ....stopListening();
              ....cancel();
              intent.destroy();
              intent. getInstance().shutdown();
      
              super.onDestroy();
          }
      }
      

      这应该可以完成您正在寻找的内容。 请记住,如果您还没有调用 getSpeech,intent 将为 null,在这种情况下,在 onDestroy() 内部您将得到一个 nullPointerException,因此您应该在调用 intent.destroy()intent.getInstance().shutdown() 之前检查 null p>

      【讨论】:

        【解决方案4】:

        如果您使用的是 Android Studio,您可以按 Ctrl+Alt+L 并选择组织导入。

        【讨论】:

        • 这如何回答这个问题?
        猜你喜欢
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        相关资源
        最近更新 更多