Исключение безопасности: без разрешения android.permission.BIND_INPUT_METHOD только для <= 2.2 - PullRequest
3 голосов
/ 29 марта 2012

У меня есть это очень необычное исключение. Дело в том, что у меня есть это приложение, которое имеет кнопку для запуска

 InputMethodService

, которая запускается так

public class MyGroovyIme extends InputMethodService {

, и вот какэто выглядит в манифесте.

  <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 </p>

Ответы [ 2 ]

0 голосов
/ 20 июля 2016
// only work for pre-lolipop
<uses-permission 
    android:name="android.permission.BIND_INPUT_METHOD" 
    tools:ignore="ProtectedPermissions" 
    android:protectionLevel="signature" />

<service 
    android:name="SimpleIME" 
    android:permission="android.permission.BIND_INPUT_METHOD" 
    android:protectionLevel="signature">

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

<supports-screens 
    android:anyDensity="true" 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" />
0 голосов
/ 18 апреля 2012

После долгих поисков не нашли надежного ответа и до сих пор не получили точную причину ... но, просматривая новые функции, нашли аппаратные функции, которые были добавлены в более поздних версиях, возможно, привели к этому снисхождению в ОС Android.Вот ссылка, описывающая основные обновления для Android здесь

...