Android的 - 不支持的服务:声音 [英] Android - Unsupported Service: audio

查看:1172
本文介绍了Android的 - 不支持的服务:声音的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想了解和解决和错误我看到在Eclipse工作空间日志,当工作在一个Android应用程序,实现了输入法。我是新来的Andr​​oid和Eclipse。

I am trying to understand and resolve and error I am seeing in the Eclipse workspace log while working on an Android app that implements an IME. I am new to Android and Eclipse.

该错误是com.utterkaos.keyboard.LatinKeyboardView失败的实例。

The error is "com.utterkaos.keyboard.LatinKeyboardView failed to instantiate."

相关联的堆栈跟踪是:

java.lang.UnsupportedOperationException:不支持的服务:声音     在   com.android.layoutlib.bridge.android.BridgeContext.getSystemService(BridgeContext.java:434)     在   android.inputmethodservice.KeyboardView(KeyboardView.java:376)     在   android.inputmethodservice.KeyboardView(KeyboardView.java:279)     在   com.utterkaos.keyboard.LatinKeyboardView(LatinKeyboardView.java:30)     在sun.reflect.NativeConstructorAccessorImpl.newInstance0(母语   法)以   sun.reflect.NativeConstructorAccessorImpl.newInstance(来源不明)     在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知   源)以java.lang.reflect.Constructor.newInstance(来源不明)     在   com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:402)     在   com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:166)     在   android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)     在   android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)     在android.view.LayoutInflater.inflate(LayoutInflater.java:466)在   android.view.LayoutInflater.inflate(LayoutInflater.java:372)在   com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:321)     在com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:324)     在   com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)     在   com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372)     在   com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1361)     在   com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1115)     在   com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.java:941)     在   com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.delegatePageChange(LayoutEditorDelegate.java:450)     在   com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.pageChange(CommonXmlEditor.java:358)     在   org.eclipse.ui.part.MultiPageEditorPart.setActivePage(MultiPageEditorPart.java:1067)     在   org.eclipse.ui.forms.editor.FormEditor.setActivePage(FormEditor.java:607)     在   com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor.selectDefaultPage(AndroidXmlEditor.java:380)     在   com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor.addPages(AndroidXmlEditor.java:285)     在   com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.addPages(CommonXmlEditor.java:283)     在   org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138)     在   org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348)     在   org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670)     在   org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465)     在   org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)     在   org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289)     在   org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945)     在   org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850)     在   org.eclipse.ui.internal.WorkbenchPage.access $ 11(WorkbenchPage.java:2842)     在   org.eclipse.ui.internal.WorkbenchPage $ 10.run(WorkbenchPage.java:2793)     在   org.eclipse.swt.custom.BusyIndi​​cator.showWhile(BusyIndi​​cator.java:70)     在   org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789)     在   org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773)     在   org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764)     在org.eclipse.ui.ide.IDE.openEditor(IDE.java:651)在   org.eclipse.ui.ide.IDE.openEditor(IDE.java:610)在   org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355)     在   org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164)     在org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249)在   org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228)在   org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275)     在   org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251)     在   org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:376)     在   org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart $ 4.打开(PackageExplorerPart.java:538)     在   org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48)     在   org.eclipse.jface.viewers.StructuredViewer $ 2.运行(StructuredViewer.java:866)     在org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)在   org.eclipse.ui.internal.JFaceUtil $ 1.运行(JFaceUtil.java:49)在   org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)在   org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864)     在   org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152)     在   org.eclipse.jface.viewers.StructuredViewer $ 6.handleOpen(StructuredViewer.java:1256)     在   org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275)     在   org.eclipse.jface.util.OpenStrategy.access $ 2(OpenStrategy.java:269)     在   org.eclipse.jface.util.OpenStrategy $ 1.handleEvent(OpenStrategy.java:309)     在org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)     在org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)在   org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)     在org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)     在   org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)     在org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)在   org.eclipse.ui.internal.Workbench.access $ 4(Workbench.java:2499)在   org.eclipse.ui.internal.Workbench $ 7.run(Workbench.java:679)在   org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)     在   org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)     在   org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)     在   org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)     在   org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)     在   org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)     在   org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)     在   org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)     在   org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)     在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在   sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)在   sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)在   java.lang.reflect.Method.invoke(来源不明)在   org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)在   org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)在   org.eclipse.equinox.launcher.Main.run(Main.java:1410)在   org.eclipse.equinox.launcher.Main.main(Main.java:1386)

java.lang.UnsupportedOperationException: Unsupported Service: audio at com.android.layoutlib.bridge.android.BridgeContext.getSystemService(BridgeContext.java:434) at android.inputmethodservice.KeyboardView.(KeyboardView.java:376) at android.inputmethodservice.KeyboardView.(KeyboardView.java:279) at com.utterkaos.keyboard.LatinKeyboardView.(LatinKeyboardView.java:30) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:402) at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:166) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135) at android.view.LayoutInflater.inflate(LayoutInflater.java:466) at android.view.LayoutInflater.inflate(LayoutInflater.java:372) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:321) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:324) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1361) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1115) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.java:941) at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.delegatePageChange(LayoutEditorDelegate.java:450) at com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.pageChange(CommonXmlEditor.java:358) at org.eclipse.ui.part.MultiPageEditorPart.setActivePage(MultiPageEditorPart.java:1067) at org.eclipse.ui.forms.editor.FormEditor.setActivePage(FormEditor.java:607) at com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor.selectDefaultPage(AndroidXmlEditor.java:380) at com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor.addPages(AndroidXmlEditor.java:285) at com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.addPages(CommonXmlEditor.java:283) at org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138) at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:376) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$4.open(PackageExplorerPart.java:538) at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) at org.eclipse.equinox.launcher.Main.run(Main.java:1410) at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

LatinKeyboardView.java的相关部分是:

The relevant part of LatinKeyboardView.java is:

public class LatinKeyboardView extends KeyboardView {

    static final int KEYCODE_OPTIONS = -100;

    public LatinKeyboardView(Context context, AttributeSet attrs) {
        super(context, attrs);

}

第30行是超(背景下,ATTRS);

Line 30 is "super(context, attrs);"

看着KeyboardView.java,行376:

Looking at KeyboardView.java, line 376:

mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

下面Context.AUDIO_SERVICE似乎是字符串声音,它出现在错误堆栈跟踪。

Here "Context.AUDIO_SERVICE" appears to be the string "audio", which appears in the error stack trace.

BridgeContext.java的相关位是:

The relevant bit of BridgeContext.java is:

    public Object getSystemService(String service) {
414        if (LAYOUT_INFLATER_SERVICE.equals(service)) {
415            return mBridgeInflater;
416        }
417
418        if (TEXT_SERVICES_MANAGER_SERVICE.equals(service)) {
419            // we need to return a valid service to avoid NPE
420            return TextServicesManager.getInstance();
421        }
422
423        // AutoCompleteTextView and MultiAutoCompleteTextView want a window
424        // service. We don't have any but it's not worth an exception.
425        if (WINDOW_SERVICE.equals(service)) {
426            return null;
427        }
428
429        // needed by SearchView
430        if (INPUT_METHOD_SERVICE.equals(service)) {
431            return null;
432        }
433
434        throw new UnsupportedOperationException("Unsupported Service: " + service);
435    }

我觉得特别令人费解的这个程序是,我看不出它所能处理的声音的服务,但BridgeContext.java和KeyboardView.java是在Android code,而不是类这两部分我已经写不正确。

What I find particularly puzzling in this routine is that I don't see how it could ever handle the "audio" service, yet BridgeContext.java and KeyboardView.java are both part of the Android code, not classes I have written incorrectly.

任何指针,以帮助我理解为什么这个错误发生,以及如何避免这将是更AP preciated。

Any pointers to help me understand why this error is occurring and how to avoid it would be much appreciated.

推荐答案

您使用API​​ 14或更高?如果是的话那这个问题。我想这是在该版本中的错误。在API 11它的工作原理。

Are you using API 14 or higher? If so thats the problem. I guess it is a bug in that version. In API 11 it works.

如果您尝试API 11,你必须做一些黑客与重写getResources()方法。检查<一href="https://github.com/chrisboyle/sgtpuzzles/blob/master/src/name/boyle/chris/sgtpuzzles/SmallKeyboard.java"相对=nofollow>这个获取更多信息。在此之后它会工作。

If you try API 11 you have to do some hack with overriding the getResources() method. Check this for more info. After this it will work.

其实我觉得也没有办法通过这一跳,从您的LatinKeyboardView的API 14(或者更高),因为你甚至不能使用isInEditMode(),因为你一定要调用查看的超级构造函数。而该构造函数将努力让这只是简单的失败,因为我想尝试在Eclipse图形编辑器(其实我得到这个错误,当我试图把我的自定义视图到一个布局在grapical布局编辑器)运行该音响系统服务

Actually i think there is no way to jump through this from your LatinKeyboardView on API 14 (or maybe higher) because you can not even use the isInEditMode() because you definitely have to invoke the View's constructor with super. And that constructor will try to get the audio system service which just simply fails because i guess you try to run this in eclipse graphical editor (actually i got this error when i tried to place my custom view into a layout in the grapical layout editor)

我认为要破解这一目标的唯一途径就是实现自己的KeyboardView没有getSystemService。也许不应该调用该方法,如果isInEditMode ==真。

I think that the only way to hack this is to implement your own KeyboardView without the getSystemService. Maybe should not call that method if isInEditMode == true.

这篇关于Android的 - 不支持的服务:声音的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆