java.lang.SecurityException:未经许可BIND_INPUT_SERVICE不允许启动服务Intent

时间:2014-01-03 11:22:06

标签: android exception service permissions

  

您好我正在使用软键盘。

     

当我访问我的服务时,我获得许可的例外   我的简单活动课中的课程。

     

堆栈异常跟踪如下所示,

enter image description here

  

在上图 InputServiceMethod class =绿色下划线

     

活动类=蓝色下划线。

     

当我调用InputServiceMethod类时,我收到此异常   来自活动课。

     

为此我使用了下面的代码,它给了我异常

Intent intent = new Intent(v.getContext(),SoftKeyboard.class);
startService(intent);
finish();
  

我的清单文件,如下所示,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.softkeyboard" 
    android:installLocation="preferExternal">

    <uses-permission android:name="android.permission.VIBRATE" />

<!--     <permission android:name="android.permission.BIND_INPUT_SERVICE"  -->
<!--         android:exported="true"></permission> -->

    <application android:label="@string/ime_name">
        <service
            android:name="com.example.android.softkeyboard.SoftKeyboard"
            android:permission="android.permission.BIND_INPUT_METHOD"
            android:exported="true">
            <intent-filter>
                <action android:name="android.view.InputMethod" />
            </intent-filter>

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

        <activity
            android:name="com.configuration.Configuration"
            android:label="@string/title_activity_configuration" >
        </activity>
      </application>  

我不明白,即使我给出了关于BIND_INPUT_METHOD 的权限,它也会抛出异常。

如何解决?感谢

2 个答案:

答案 0 :(得分:2)

看起来您正在将操作绑定到操作android.view.InputMethod,同时受到权限android.permission.BIND_INPUT_METHOD的保护,该权限用于确保只有系统可以通过其保护级别绑定到它。因此,根据Android,您只能定义键盘处理服务但不能显式调用它,只要需要输入法,系统就会自动调用它。所以有两种方法可以解决它: 1.让系统调用它,不要把它称为显式,或者 2.使用您正在运行的系统签名对应用程序进行签名,这将使您的应用程序平台依赖。 (不建议您的建筑通用申请)。

希望你了解情况。

答案 1 :(得分:0)

您正在使用的许可,即:     关于BIND_INPUT_METHOD的许可
    仅适用于系统应用程序,并且大部分仅适用于有根设备,     它不会在无根设备上接受。