android - 我想从活动开始服务

时间:2012-07-03 02:37:21

标签: android service permissions

我在一个项目中有软键盘服务和设置活动。当软键盘运行时,设置活动是软键盘结束并启动。但是,我收到了日志。

日志

07-03 11:15:08.969: E/AndroidRuntime(8340): FATAL EXCEPTION: main 07-03 11:15:08.969: E/AndroidRuntime(8340): java.lang.SecurityException: Not allowed to start service Intent { cmp=com.example.android.softkeyboard/.SoftKeyboard } without permission android.permission.BIND_INPUT_METHOD
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.app.ContextImpl.startService(ContextImpl.java:836)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.content.ContextWrapper.startService(ContextWrapper.java:336)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.example.android.softkeyboard.MakeKeyActivity.SaveTotxt(MakeKeyActivity.java:213)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.example.android.softkeyboard.MakeKeyActivity.onOptionsItemSelected(MakeKeyActivity.java:144)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.app.Activity.onMenuItemSelected(Activity.java:2205)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:749)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:859)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:581)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:127)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.view.View$PerformClick.run(View.java:9099)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.os.Handler.handleCallback(Handler.java:587)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.os.Looper.loop(Looper.java:123)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at android.app.ActivityThread.main(ActivityThread.java:3683)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at java.lang.reflect.Method.invokeNative(Native Method)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at java.lang.reflect.Method.invoke(Method.java:507)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
07-03 11:15:08.969: E/AndroidRuntime(8340):     at dalvik.system.NativeStart.main(Native Method)

我允许显示

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

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

    <application android:label="aabbccdd">


        <activity
            android:name=".CustomKeyboardActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:name=".MakeKeyActivity"
            android:label="@string/app_name">
        </activity>
        <activity 
            android:name=".MakeDictionaryActivity"
            android:label="@string/app_name">
        </activity>
        <activity 
            android:name=".UpandDownActivity"
            android:label="@string/app_name">
        </activity>


        <service 
                android:exported="true"
                android:enabled="true" 
                android:name=".SoftKeyboard"
                android:permission="android.permission.BIND_INPUT_METHOD">
            <intent-filter>
                <action android:name="android.view.InputMethod" />
            </intent-filter>
            <meta-data android:name="android.view.im" android:resource="@xml/method" />
        </service>
        <uses-permission android:name="android.permission.BIND_INPUT_METHOD"/>

    </application>
</manifest>

我叫这段代码。

Intent intent=new Intent(this,SoftKeyboard.class);
stopService(intent);
startService(intent);

我允许但是,为什么请求许可?

1 个答案:

答案 0 :(得分:2)

看起来您将<uses-permission>元素作为<application>元素的子元素。它应与<application>元素下的<manifest>处于同一级别。

换句话说,改变最后几行:

    </service>
    <uses-permission android:name="android.permission.BIND_INPUT_METHOD"/>
  </application>
</manifest>

到此:

    </service>
  </application>
  <uses-permission android:name="android.permission.BIND_INPUT_METHOD"/>
</manifest>