5

Impossibile avviare l'attività di sms predefinita nello stack di applicazioni. Problema visto in nexus 6 lollipop e android one marshmallow.Whatsapp come invito tramite l'implementazione di sms, solo sms, non tramite selettore di intent

Ho provato a inviare l'intento di ACTION_VIEW e impostato il corpo smsto: e sms.

Sono in grado di avviare l'applicazione sms.

Ho il seguente comportamento della mia app.

  1. devo elenco di numeri di telefono nella mia app

  2. Quando l'utente dice invito, voglio lanciare predefinita sms app, compilare per corpo e sms e SMS predefinito applicazione dovrebbe essere nel mio compito di attività .

  3. Premendo indietro, voglio chiudere l'app di messaggistica.

Si prega di vedere le immagini di riferimento sottostanti 1. La mia app invitano 2. su invito, il lancio sms

send sms, press back, check recent app list

Quello che sono in grado di raggiungere. Sono in grado di raggiungere sopra menzionato in kitkat. (l'applicazione sms predefinita termina) ma, non in lecca-lecca e marshmallow. L'app sms predefinita passa allo sfondo.

  1. Avviare l'applicazione sms predefinita e compilare i dati.
  2. Premendo indietro, l'app di messaggistica passa allo sfondo.
  3. Ora sarò in grado di avviare l'app sms dall'elenco delle app recenti, che riempie di nuovo il destinatario con lo stesso numero e corpo, che non è destinato.

Il problema è che l'app viene avviata in un nuovo task di attività. Non riesco a ottenere quell'app di messaggistica nella mia attività di attività. Se torno indietro su quell'app di messaggistica, sono in grado di tornare alla mia app. Ma se scelgo l'app di messaggistica dall'elenco recente, mostra sempre il destinatario sms e l'attività piena di corpo.

Si prega di trovare il frammento di codice di seguito

private void sendTextMessage(String to) 
{ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // At least KitKat 
    { 
     String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(mActivity); // Need to change the build to API 19 
     Logger.log_error(TAG + "sendTextMessage() above KITKAT"); 
     Intent sendIntent = new Intent(Intent.ACTION_SEND); 
     sendIntent.setType("text/plain"); 
     sendIntent.putExtra("address", to); 
     sendIntent.putExtra("sms_body", "sms body"); 
     sendIntent.putExtra(Intent.EXTRA_TEXT, "sms body"); 

     if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would be able to choose 
     // any app that support this intent. 
     { 
      sendIntent.setPackage(defaultSmsPackageName); 
      Logger.log_error(TAG + "sendTextMessage() defaultSmsPackageName = " + defaultSmsPackageName); 
     } 
     getContext().startActivity(sendIntent); 
     } 
     else // For early versions, do what worked for you before. 
     { 
      Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW); 
      Logger.log_error(TAG + "sendTextMessage() below KITKAT"); 
      smsIntent.setType("vnd.android-dir/mms-sms"); 
      smsIntent.putExtra("address", to);   
      smsIntent.putExtra("sms_body", getString(R.string.str_share_app_short_text)); 
      startActivity(smsIntent); 
    } 
} 

Questo modo di lancio si scherzi con la messaggistica app.

Ho provato l'intenzione di avvio senza cronologia, istanza singola, esclusione da recenti.

Per riferimento, allego gli screenshot di whatsapp, che sto cercando di avere nella mia attività. Non riesco a pubblicare più di 2 link nello stack overflow, quindi mantenere solo l'elenco delle app recenti.

  1. Avviare whatsapp, andare a contatti, scorrere verso il basso, cercare l'invito in verde e invitare.
  2. Avvierà l'app sms.
  3. Controllare le ultime notizie.

check in recent list

+0

Ti suggerisco di consultare https://fabric.io/kits/android/branch e https://firebase.google.com/docs/invites/android per un migliore monitoraggio. –

risposta

7

penso, ho trovato risposta. Potrebbe non essere l'ideale ma funziona.

private void shareEx() { 
    List<Intent> targetShareIntents=new ArrayList<Intent>(); 
    PackageManager packageManager = getContext().getPackageManager(); 
    Intent shareIntent=new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    List<ResolveInfo> resInfos= getContext().getPackageManager().queryIntentActivities(shareIntent, 0); 
    if(!resInfos.isEmpty()){ 
     Logger.log_error(TAG + "sharenew Have package"); 
     for(ResolveInfo resInfo : resInfos){ 
      String packageName = resInfo.activityInfo.packageName; 

      Intent intent = new Intent(); 
      intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); 
      intent.setAction(Intent.ACTION_SEND); 
      intent.setType("text/plain"); 

      intent.setPackage(resInfo.activityInfo.parentActivityName); 

      //ignore list 
      if(packageName.contains("wifi") || packageName.contains("bluetooth") || packageName.contains("nfc") || packageName.contains("connect") || packageName.contains("memo") || packageName.contains("translate") || packageName.contains("gps") 
        || packageName.contains("file") || packageName.contains("File") || packageName.contains("drive") || packageName.contains("office") || packageName.contains("docs") || packageName.contains("dropbox") || packageName.contains("beam") 
        || packageName.contains("keep")) { 
       Logger.log_error(TAG + "sharenew IGNORE Package packageName = " + packageName); 
       continue; 
      } 

      Logger.log_error(TAG + "sharenew Package packageName = " + packageName); 
      if (packageName.contains("sms") || packageName.contains("mms") || packageName.contains("talk") || packageName.contains("messaging") || packageName.contains("twitter") || packageName.contains("com.facebook.orca")) {     
       intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.str_share_app_short_text)); 
       intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.str_share_app_subject)); 
      } else if(packageName.contains("whatsapp")) { 
       // dont add subject for whatsapp 
       intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.str_share_app_long_text)); 
      } else { 
       intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.str_share_app_long_text)); 
       intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.str_share_app_subject));     
      } 
      targetShareIntents.add(new LabeledIntent(intent, packageName, resInfo.loadLabel(packageManager), resInfo.icon)); 
     } 
     if(!targetShareIntents.isEmpty()){ 
      Logger.log_error(TAG +"sharenew Have Intent"); 
      Intent chooserIntent=Intent.createChooser(targetShareIntents.remove(0), "Choose app to share"); 
      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); 
      startActivity(chooserIntent); 
     }else{ 
      Logger.log_error(TAG +"sharenew nothing"); 
     } 
    } 
} 

Riferimento: How to filter specific apps for ACTION_SEND intent (and set a different text for each app)

Chiedo le persone a migliorare la risposta. Grazie.