2017-02-28 3 views
1

StackOverflowや他のフォーラムの全体を見てきましたが、今まで見たことはありませんでした。私の会社にはアクティビティとサービスのあるアプリがあり、クライアントの1人は自分のアプリを使ってサービスの部分を利用できるようにしたいと考えています。だから私はこれがどのように動作するかをテストするために別のアプリを書こうとしていますが、それを動作させることはできません。ここにマニフェストの関連部分があります。他のアプリからAndroidサービスを利用できるようにする

<service android:name="com.gpssolutions.rtrover.RTRoverService" 
     android:process=":RTRoverServiceProcess" 
     android:exported="true" 
     android:enabled="true"> 
</service> 

ここは、アクティビティのコードです。

intent = new Intent(); 

intent.setComponent(new ComponentName(
    "com.gpssolutions.rtrover", "com.gpssolutions.rtrover.RTRoverService" 
)); 

//intent.setClassName("com.gpssolutions.rtrover", "RTRoverService"); 
intent.putExtra("inpStr", input); 
startService(intent); 

私は、サービスの名前と完全なパスのみを指定しようとしました。私はsetComponentとsetClassNameを試しました。私は、プロセスの部分を削除することを含むXML設定のさまざまな組み合わせを試してみました。何も動作しません。

「adbシェルサービスリスト」を実行すると、サービスがリストされません。私は活動からサービスを開始しようとすると、私は次を得る:

W/ActivityManager: Unable to start service Intent { cmp=com.gpssolutions.rtrover/.RTRoverService (has extras) } U=0: not found" 

Androidのバージョンは4.4.4です。

ありがとうございます。

編集:ここでは

が、他のアプリがへのアクセスを望んでいるサービスを含むアプリケーションのための私の全体のマニフェストです。マニフェストで

<?xml version='1.0' encoding='utf-8'?> 
<manifest package="com.gpssolutions.RTRover" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:versionName="1.0" 
    android:versionCode="1" 
    android:installLocation="auto" 
> 
    <application android:hardwareAccelerated="true" 
     android:name="org.qtproject.qt5.android.bindings.QtApplication" 
     android:icon="@drawable/app_rtrover" 
     android:label="RTRover" 
    > 
     <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" 
      android:name="com.gpssolutions.rtrover.RTRoverActivity" 
      android:label="RTRover" 
      android:icon="@drawable/app_rtrover" 
      android:screenOrientation="portrait" 
      android:launchMode="singleTop" 
     > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
      <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/> 
      <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/> 
      <meta-data android:name="android.app.repository" android:value="default"/> 
      <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/> 
      <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/> 
      <!-- Deploy Qt libs as part of package --> 
      <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/> 
      <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/> 
      <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/> 
      <!-- Run with local libs --> 
      <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/> 
      <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/> 
      <meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/> 
      <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/> 
      <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/> 
      <!-- Messages maps --> 
      <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/> 
      <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/> 
      <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/> 
      <meta-data android:name="android.app.background_running" android:value="false"/> 
     </activity> 
     <service android:name="com.gpssolutions.rtrover.RTRoverService" 
      android:process=":RTRoverServiceProcess" 
      android:exported="true" 
      android:enabled="true"> 
     </service> 
    </application> 
    <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="14"/> 
    <supports-screens android:largeScreens="true" 
     android:normalScreens="true" 
     android:anyDensity="true" 
     android:smallScreens="true"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.BLUETOOTH" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
</manifest> 
+0

ですから、1つのアプリが別のアプリでサービスを開始したいですか?あなたは放送受信機を見ましたか? – Shmuel

+0

Androidはあなたのサービスを見つけることができないことを示しています。サービスを持つアプリケーションがインストールされていないか、 'Intent'オブジェクトが' '要素と一致しません。 FWIW、[こちらのサンプルアプリケーションのペア](https://github.com/commonsguy/cw-omnibus/tree/master/Binding/Remote)は、リモートサービスを実演しています。私の場合は、 'startService()'ではなく 'bindService()'を使用していますが、 ' '要素では' android:process'を使用しません。また、(クライアントがサービス名をハードコードする必要があるのではなく)適切なサービスを見つけるためのブートストラップに、暗黙の 'Intent'を使用します。 – CommonsWare

+0

サービス内のアプリケーションとともにマニフェスト全体を投稿してください。 –

答えて

0

、あなたは

package="com.gpssolutions.RTRover" 

を指定して、あなたの他のアプリがあなたのServiceを開始しようとしたときしかし、それはこのパッケージ名でIntentを作成します。このコードでは、"com.gpssolutions.rtrover"

intent.setComponent(new ComponentName("com.gpssolutions.rtrover", 
        "com.gpssolutions.rtrover.RTRoverService")); 

注:パッケージ名では大文字と小文字が区別されます。

は、このようにサービスを起動してみてください:

intent = new Intent(); 
intent.setComponent(new ComponentName("com.gpssolutions.RTRover", 
       "com.gpssolutions.rtrover.RTRoverService")); 
intent.putExtra("inpStr", input); 
startService(intent); 
+0

これで修正されました。ありがとう! – user3912282

関連する問題