0

私が見つけた多くの同様の質問のどれも、私の問題を解決するのに役立ちませんでした.

ここに私が見たいくつかの質問があります:

これが私のAndroidアプリコードの一部です:

    //Local service interface
private INetworkQueryService myNetworkQueryService = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    Intent intent = new Intent(this, NetworkQueryService.class);
    startService (intent);
    bindService (new Intent(this, NetworkQueryService.class), myNetworkQueryServiceConnection,
                            Context.BIND_AUTO_CREATE);
}

//Service connection
private final ServiceConnection myNetworkQueryServiceConnection = new ServiceConnection() {
    /** Handle the task of binding the local object to the service */
    public void onServiceConnected(ComponentName className, IBinder service) {
        myNetworkQueryService = ((NetworkQueryService.LocalBinder) service).getService();
        // as soon as it is bound, run a query.
        loadNetworksList();
    }

    /** Handle the task of cleaning up the local binding */
    public void onServiceDisconnected(ComponentName className) {
        myNetworkQueryService = null;
    }

    public void loadNetworksList() {
        // delegate query request to the service.
        try {
            myNetworkQueryService.startNetworkQuery(myCallback);
        } catch (RemoteException e) {
        }
    }

};  

/**
 * This implementation of INetworkQueryServiceCallback is used to receive
 * callback notifications from the network query service.
 */
private final INetworkQueryServiceCallback myCallback = new INetworkQueryServiceCallback.Stub() {

    @Override
    public void onQueryComplete(List<NetworkInfo> networkInfoArray,
            int status) throws RemoteException {
        displayNetworks(networkInfoArray, status);
    }

    /** place the message on the looper queue upon query completion. */

};

おわかりのように、myNetworkQueryServiceConnection は bindService メソッド (onCreate() にあります) 内から呼び出す必要があります。これは(理論的には)onServiceConnectedも実行する必要があります(私はそう思います)が、コードにブレークポイントを配置すると、そのメソッド内で停止することはありません。デバッグを行ったところ、bindService が false を返すため、何らかの理由で正常にバインドされていません。

Android でサービスをバインドする必要があるのはこれが初めてなので、何かを見逃していると確信しています。誰かが間違いを指摘してくれることを願っています。

不足している情報がありましたらお知らせください。何が必要なのかわかりません。アプリ コード全体をここに掲載することはできません。

編集:マニフェストにサービスを登録することについて読み続けていますが、それがどこでどのように行われるのかわかりませんか? このプロジェクトのマニフェストは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tek15.cellemrmonitor"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="19"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

確かにサービスについては何もわかりませんが、追加する方法がわからないのでしょう。

4

1 に答える 1

7

の子として、要素<service>のピアとして要素を追加する必要があります。<activity><application>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tek15.cellemrmonitor"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="19"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name="NetworkQueryService" />
</application>

NetworkQueryService私の例の要素は、それが実際にそうであると仮定しています。com.tek15.cellemrmonitor.NetworkQueryServiceそれ以外の場合は、適切な完全修飾クラス名に置き換えてください。

于 2015-04-19T21:24:12.943 に答える