我试图从Activity访问InputMethodService,我遇到了权限问题.这适用于自定义键盘应用.

我想要实现的是将在Activity中创建的文本绑定回InputMethodService. Activity从InputMethodService打开,然后从Activity,我尝试启动服务(这可能是问题.这是我如何从InputMethodService打开Activity:

@Override public void onStartInputView(EditorInfo attribute, boolean restarting) {

super.onStartInputView(attribute, restarting);

Intent intent = new Intent(this, MyKeyboard.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

context.startActivity(intent);

}

这是我尝试与Activity中的InputMethodService进行通信的地方:

@Override

public void onCreate(Bundle bundle){

super.onCreate(bundle);

setContentView(R.xml.keyboard);

startService(new Intent(this, MyService.class));

}

这是我的清单文件:

package="com.my.package">

android:permission="android.permission.BIND_INPUT_METHOD">

这是我的堆栈跟踪:

11-18 15:58:34.732: E/AndroidRuntime(5458): Uncaught handler: thread main exiting due to uncaught exception

11-18 15:58:34.752: E/AndroidRuntime(5458): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage/com.mypackage.MyActivity}: java.lang.SecurityException: Not allowed to start service Intent { cmp=com.mypackage/.MyService} without permission android.permission.BIND_INPUT_METHOD

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ActivityThread.access$2200(ActivityThread.java:119)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.os.Handler.dispatchMessage(Handler.java:99)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.os.Looper.loop(Looper.java:123)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ActivityThread.main(ActivityThread.java:4363)

11-18 15:58:34.752: E/AndroidRuntime(5458): at java.lang.reflect.Method.invokeNative(Native Method)

11-18 15:58:34.752: E/AndroidRuntime(5458): at java.lang.reflect.Method.invoke(Method.java:521)

11-18 15:58:34.752: E/AndroidRuntime(5458): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

11-18 15:58:34.752: E/AndroidRuntime(5458): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

11-18 15:58:34.752: E/AndroidRuntime(5458): at dalvik.system.NativeStart.main(Native Method)

11-18 15:58:34.752: E/AndroidRuntime(5458): Caused by: java.lang.SecurityException: Not allowed to start service Intent { cmp=com.mypackage/.MyService } without permission android.permission.BIND_INPUT_METHOD

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ApplicationContext.startService(ApplicationContext.java:765)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.content.ContextWrapper.startService(ContextWrapper.java:326)

11-18 15:58:34.752: E/AndroidRuntime(5458): at com.mypackage.MyActivity.onCreate(MyActivity.java:94)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

11-18 15:58:34.752: E/AndroidRuntime(5458): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

11-18 15:58:34.752: E/AndroidRuntime(5458): ... 11 more

有任何想法吗?

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐