5

मेरे एप्लिकेशन स्टैक में डिफ़ॉल्ट एसएमएस गतिविधि लॉन्च करने में असमर्थ। नेक्सस 6 लॉलीपॉप और एंड्रॉइड एक मार्शमलो में देखा गया मुद्दा।व्हाट्सएप एसएमएस कार्यान्वयन के माध्यम से आमंत्रण की तरह, बस एसएमएस, इरादे चयनकर्ता के माध्यम से नहीं

मैंने ACTION_VIEW के इरादे को भेजने की कोशिश की है, और smsto: और एसएमएस बॉडी सेट करें।

मैं एसएमएस एप्लिकेशन लॉन्च करने में सक्षम हूं।

मेरे पास मेरे ऐप का निम्न व्यवहार है।

  1. मैं अपने अनुप्रयोग में संपर्क नंबर की सूची है

  2. उपयोगकर्ता को आमंत्रित, मैं, डिफ़ॉल्ट एसएमएस एप्लिकेशन को लॉन्च करने में भरने और एसएमएस शरीर और डिफ़ॉल्ट SMS ऐप मेरी गतिविधि कार्य में होना चाहिए करना चाहते हैं का कहना है कि जब ।

  3. वापस दबाकर, मैं मैसेजिंग ऐप बंद करना चाहता हूं।

1. नीचे संदर्भ तस्वीरें देखने मेरा ऐप 2. पर आमंत्रित करते हैं आमंत्रित करते हैं, लांच एसएमएस

send sms, press back, check recent app list

क्या मैं प्राप्त करने के लिए कर रहा हूँ कृपया। मैं ऊपर उल्लिखित किटकैट प्राप्त करने में सक्षम हूं। (डिफ़ॉल्ट एसएमएस ऐप खत्म) लेकिन, लॉलीपॉप और मार्शमलो में नहीं। डिफ़ॉल्ट एसएमएस ऐप पृष्ठभूमि में जाता है।

  1. डिफ़ॉल्ट एसएमएस ऐप लॉन्च करें और डेटा भरें।
  2. वापस दबाकर, मैसेजिंग ऐप पृष्ठभूमि में जाता है।
  3. अब मैं हालिया ऐप सूची से एसएमएस ऐप लॉन्च करने में सक्षम हूं, जो फिर से प्राप्तकर्ता को उसी संख्या और शरीर से भरता है, जिसका इरादा नहीं है।

समस्या यह है कि ऐप नए गतिविधि कार्य में लॉन्च किया गया है। मैं अपने गतिविधि कार्य में उस संदेश एप्लिकेशन को प्राप्त करने में असमर्थ हूं। अगर मैं उस मैसेजिंग ऐप पर वापस दबाता हूं, तो मैं अपने ऐप पर वापस आ सकता हूं। लेकिन अगर मैं हालिया सूची से मैसेजिंग ऐप चुनता हूं, तो यह हर बार एसएमएस प्राप्तकर्ता और शरीर से भरा गतिविधि दिखाता है।

नीचे

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); 
    } 
} 

कोड स्निपेट शुरूआत के इस तरह संदेश सेवा एप्लिकेशन के साथ खिलवाड़ कर रहा है प्राप्त करें।

मैंने किसी इतिहास, एकल उदाहरण के साथ इरादे लॉन्च करने का प्रयास किया है, जो रिकेंट से बाहर नहीं है।

संदर्भ के लिए मैं व्हाट्सएप स्क्रीनशॉट संलग्न कर रहा हूं, जिसे मैं अपनी गतिविधि में रखने की कोशिश कर रहा हूं। मैं स्टैक ओवरफ़्लो में 2 से अधिक लिंक पोस्ट करने में सक्षम नहीं हूं, इसलिए केवल हालिया ऐप सूची को ही रखना।

  1. लॉन्च whatsapp, संपर्क करने के लिए जाना, नीचे स्क्रॉल करें, के लिए हरी में आमंत्रित करते हैं और को आमंत्रित करते हैं।
  2. यह एसएमएस ऐप लॉन्च करेगा।
  3. रिकेंट की जांच करें।

check in recent list

+0

मैं सुझाव है कि आप बेहतर तरीके से निगरानी में https://fabric.io/kits/android/branch और https://firebase.google.com/docs/invites/android देखने के लिए। –

उत्तर

7

मुझे लगता है, मैं इस सवाल का जवाब मिल गया। आदर्श लेकिन काम करता है नहीं हो सकता।

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"); 
     } 
    } 
} 

संदर्भ: How to filter specific apps for ACTION_SEND intent (and set a different text for each app)

मेरा अनुरोध है लोग जवाब में सुधार होगा। धन्यवाद।

संबंधित मुद्दे