Можем ли мы получать данные из других приложений в фоновой службе?

согласно документации Android, мы определенно можем получать данные из других приложений в действии, как показано в ссылке.

https://developer.android.com/training/sharing/receive.html

Итак, я попробовал это, и это работает отлично, но у меня есть особые моменты, когда я не хочу, чтобы активность выходила на передний план. Я хочу, чтобы намерение было получено службой вместо действия.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />



<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

 <service android:name=".BackgroundPresentation"
          android:exported="false">

  <intent-filter>
      <action android:name="android.intent.action.SEND" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:mimeType="image/*" />
    </intent-filter>

   <intent-filter>
       <action android:name="android.intent.action.SEND" />
       <category android:name="android.intent.category.DEFAULT" />
       <data android:mimeType="text/plain" />
   </intent-filter>

   <intent-filter>
       <action android:name="android.intent.action.SEND_MULTIPLE" />
       <category android:name="android.intent.category.DEFAULT" />
       <data android:mimeType="image/*" />
   </intent-filter>

  </service>



  <activity android:name=".MainActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden">

     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>

      <intent-filter>
          <action android:name="android.intent.action.SEND" />
          <category android:name="android.intent.category.DEFAULT" />
          <data android:mimeType="image/*" />
      </intent-filter>

      <intent-filter>
          <action android:name="android.intent.action.SEND" />
          <category android:name="android.intent.category.DEFAULT" />
          <data android:mimeType="text/plain" />
       </intent-filter>

       <intent-filter>
          <action android:name="android.intent.action.SEND_MULTIPLE" />
          <category android:name="android.intent.category.DEFAULT" />
           <data android:mimeType="image/*" />
       </intent-filter>
    </activity>
</application>

But somehow I cannot receive intent in service, as it seems android:launchMode=singleTask is valid only for activities.

OnNewIntent отлично работает для активности, как показано ниже.

protected void onNewIntent(Intent intent) {
    Log.e(TAG, "------->NewIntent is also called");
    super.onNewIntent(intent);
    setIntent(intent);//must store the new intent unless getIntent() will return the old one

    // Get intent, action and MIME type
    String action = intent.getAction();
    String type = intent.getType();

    Log.d(TAG, "onCreate: intent is " +    intent.getStringExtra(Intent.EXTRA_TEXT));
}

Может ли кто-нибудь предложить способ, которым я могу получать намерения/данные от других приложений в службе. ?


person Ajay Partap Singh    schedule 15.07.2016    source источник
comment
почему бы не использовать BroadCastReceiver в службе?   -  person Cgx    schedule 15.07.2016
comment
Я могу использовать широковещательный приемник. не могли бы вы уточнить, как это решит мою проблему?   -  person Ajay Partap Singh    schedule 15.07.2016
comment
Насколько я понимаю, вы хотите, чтобы ваша служба получала IntentFilters от других приложений, которые хотят обмениваться данными?   -  person DeeV    schedule 15.07.2016
comment
да это именно то, что я хочу.   -  person Ajay Partap Singh    schedule 15.07.2016
comment
Вы настроили свою активность на получение тех же IntentFilters? Итак, ваша активность их ловит. Почему бы не регистрировать их динамически, когда ваша активность открыта/запущена, и отменить их регистрацию, когда она закрыта/когда вы не хотите, чтобы она получала трансляцию?   -  person Mark Keen    schedule 15.07.2016
comment
Извиняюсь. Я считаю, что это то, что вы хотите. stackoverflow .com/questions/15071830/   -  person DeeV    schedule 15.07.2016
comment
@MarkKeen, если я удалю фильтр намерений из активности, я не увижу кнопку «Поделиться» для своего приложения в другом приложении. Вы говорите мне отменить их программную отмену при запуске приложения?   -  person Ajay Partap Singh    schedule 15.07.2016
comment
Для кнопки общего доступа к системе требуется действие. Единственное, что вы можете сделать, это запустить прозрачное действие, которое запускает службу, которая извлекает нужные вам данные, но действие должно жить, пока оно ожидает отправки данных обратно в вызывающее действие.   -  person DeeV    schedule 15.07.2016
comment
Вы не можете запустить службу с этими фильтрами намерений. Создайте фиктивную активность для перехвата этих IntentFilters и вызовите startService() в onCreate, затем finish();   -  person Mark Keen    schedule 15.07.2016
comment
Вариантом может быть использование действия «IntentFilter» (фиктивное действие), которое обрабатывает все фильтры, а затем решает, что с ним делать из их (я не знаю, каковы ваши варианты использования для запуска MainActivity или вашей службы) .. , возможно, логическое значение SharedPreferences, которое вы обновляете по мере необходимости, чтобы проверить, что следует использовать.   -  person Mark Keen    schedule 15.07.2016
comment
Я устал от этого, finish(); активность закрывается, и моя служба работает. Но на самом деле мне нужно передавать данные в сервис довольно часто. Поэтому каждый раз, когда мне нужно передавать данные из других приложений, нужно ли мне открывать активность? потому что на данный момент, если я попытаюсь передать данные, он снова откроет действие.   -  person Ajay Partap Singh    schedule 15.07.2016
comment
Итак, мой сервис похож на сервис, которому довольно часто требуются данные из других приложений, например, мне нужно получить URI изображений из изображений в галерее в сервис.   -  person Ajay Partap Singh    schedule 15.07.2016
comment
Используете ли вы START_STICKY в своей службе?   -  person Mark Keen    schedule 15.07.2016
comment
Нет. Как это поможет решить мою проблему?   -  person Ajay Partap Singh    schedule 15.07.2016
comment
Как вы реализуете свой Сервис, зависит от вас. Я пытаюсь дать предложения о том, как решить ваш опубликованный вопрос, связанный с фильтрами намерений и службой.   -  person Mark Keen    schedule 15.07.2016
comment
Спасибо, я ценю все предложения.   -  person Ajay Partap Singh    schedule 15.07.2016