2015-09-03 2 views
0

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

вот цель код обработки, который я звоню в onCreate() методе

public void handleIntents(){ 

    Intent intent = getIntent(); 
    String action = intent.getAction(); 
    String type = intent.getType(); 


    if (Intent.ACTION_SEND.equals(action) && type != null) { 
     if ("text/plain".equals(type)) { 
      // handleSendText(intent); // Handle text being sent 
     } else if (type.startsWith("image/")) { 
      handleSendImage(intent); // Handle single image being sent 
     } 
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { 
     if (type.startsWith("image/")) { 
      //handleSendMultipleImages(intent); // Handle multiple images being sent 
     } 
    } else { 
     // Handle other intents, such as being started from the home screen 
    } 

} 

вот манифест декларации

<activity 
     android:name=".HomeScreen" 
     android:screenOrientation="portrait" 
     android:windowSoftInputMode="stateHidden" 
     android:launchMode="singleTask"> 

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

    </activity> 

Так что, когда я потреблял намерение, то это не должно произойти, если новое намерение снова создается.

Примечание: предлагаю создать такую ​​же ситуацию, попробуйте код в вашей системе.

Что я хочу; Я разделяю изображение из галереи на эту app.Now я нажимаю тогда открыть эту деятельность из списка недавних,

  1. Он не должен пытаться повторно отправить изображение.

    Когда я возвращаюсь и снова выбираю изображение и делюсь с моим приложением, то он должен.

ответ

1

После того, как вы вернетесь к той же деятельности, Android будет использовать то же намерение, чтобы обеспечить то же самое состояние может быть достигнут, попробуйте setIntent(null) после обработки изображения

Вашего комментария я думаю, что я получаю использование case now, thats происходит потому, что активность не была закончена, поэтому каждый раз, когда вызывается метод onCreate, потому что либо повернутый экран, либо система воссоздает активность (собирается фон или такая), вызывается onCreate и передаст вам то же намерение, был использован для начала активности в первый раз, что вы можете сделать в этом случае - chec k для Bundle savedInstanceState, которое вы получаете по методу onCreate, если это null, то это первый раз, когда создается действие, и вы должны загрузить изображение, иначе деятельность будет воссоздана, и вам не нужно загружать изображение. Кроме того, что изображение может быть загружено или не было успешно загружено, экран может быть повернут и загрузка остановлена ​​и т. Д. (Это будет зависеть от того, как вы загружаете, AsyncTaks, Thread, Services и т. Д.), Вы действительно можете попытаться загрузите изображение еще раз, в этом случае вы можете сделать, как @eduyayo предлагает и использовать дополнительный, чтобы указать, что изображение уже загружено

+0

Добавление к @force будет отвечать, если вы все еще хотите сохранить намерение загружать данные из него или что-то еще, вы можете использовать условие, когда 'onCreate (android.os.Bundle) 'вызывается с ненулевым Bundle, вы повторно используете предыдущую деятельность, чтобы вы знали, что вам нужно обрабатывать ее по-разному. Кроме того, вы можете установить дополнительное для намерения не потерять свои данные, но знать, что он уже обработан – eduyayo

+0

спасибо, но это все еще происходит – Amar

+0

Попробуйте это в своей деятельности '@Override protected void onNewIntent (намерение намерения) {супер. onNewIntent (намерение); setIntent (намерение); } ' – forcewill

0

Вы всегда можете перезаписать то, что вызывается onResume().

Еще одна идея, которая приходит на ум сейчас, вы можете использовать threads.And onResume, вы убедитесь, что поток не запустится. Итак? Булев должен выполнить задание. Я напишу вам некоторый псевдокод, чтобы вы могли понять, что я говорю.

Boolean name = false; 

onCreate(){ 
    if(name = false){ 
      Run ur thread now 
    } 
} 
onResume(){ 
    if(name = false){ 
      Run ur thread now 
    } 
} 

Это должно сделать работу, mate.Let мне знать, если вам нужно больше info.I'll попозже немного.

Смежные вопросы