我有一个非常不寻常的异常。问题是我有这个带有启动按钮的应用程序
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/