android - java.lang.SecurityException : without permission android. permission.BIND_INPUT_METHOD 仅适用于 <=2.2

标签 android android-intent android-service android-input-method android-version

我有一个非常不寻常的异常。问题是我有这个带有启动按钮的应用程序

 InputMethodService

是这样开始的

public class MyGroovyIme extends InputMethodService {

这就是它在 list 中的样子。

  <service
        android:name=".MyGroovyIme"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BIND_INPUT_METHOD" >
        <intent-filter>
            <action android:name="android.view.InputMethod" />
            <!-- <category android:name="android.intent.category.DEFAULT" /> -->
        </intent-filter>

        <meta-data
            android:name="android.view.im"
            android:resource="@xml/method" />
    </service>

这就是我开始服务的方式

  void startServer() {
    Log.v(TAG, "Starting service...");
    Intent serviceIntent = new Intent(this, MyGroovyIme.class);
    startService(serviceIntent);
    Log.v(TAG, "Starting service...success!!!");
    // this.finish();
    Log.v(TAG, "finish called...");
}

当我在平板电脑(Moto XOOM,它的 3.2)上进行时,整个设置就像一个魅力,但是当我在运行 2.2 和 2.1 的设备上进行时(我没有在 2.3 上尝试过,也不能使用模拟器)这个是我得到的

 java.lang.SecurityException: Not allowed to start service Intent { cmp=com.spp.ime.demo/.MyGroovyIme } without permission android.permission.BIND_INPUT_METHOD
at android.app.ContextImpl.startService(ContextImpl.java:840)
at android.content.ContextWrapper.startService(ContextWrapper.java:336)
at com.spp.ime.demo.GROOVY_IME_DEMOActivity.startServer(GROOVY_IME_DEMOActivity.java:137)
at com.spp.ime.demo.GROOVY_IME_DEMOActivity.onStartClick(GROOVY_IME_DEMOActivity.java:104)
at com.spp.ime.demo.GROOVY_IME_DEMOActivity.onClick(GROOVY_IME_DEMOActivity.java:67)
at android.view.View.performClick(View.java:2408)
at android.view.View$PerformClick.run(View.java:8816)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)

我确实理解安全问题,但它不应该对所有设备都一样,或者我是否缺少版本 <3.2

的特定内容

最佳答案

找了很久都没有找到可靠的答案,也没有得到确切的原因.. 但是通过新功能发现在更高版本中添加的硬件功能可能导致了 Android 操作系统的这种宽松。 这是描述 Android 主要更新的链接 here

关于android - java.lang.SecurityException : without permission android. permission.BIND_INPUT_METHOD 仅适用于 <=2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925367/

相关文章:

virtualbox 和 linux/windows 上的 android-x86

android - 从父级开始和停止 Activity ?

java - 如何在另一个 Activity 中调用方法

android broadcastreceiver 与听众

android - 如何在屏幕关闭的情况下让我的加速度计保持清醒

android - 我无法配置 Intent 和 BroadcastReceiver

android - 如何发送 HTML 电子邮件

android - 为什么我的应用程序在启动照片 Intent 之后但在调用 onActivityResult() 之前崩溃?

android - 继续检查网络连接android

android - 从 Android 中的服务使用 SQLite 数据库