رفتن به مطلب
  • 0

multi sharing یا اشتراک چند فایل به طور همزمان


ali mo

سوال

سلام وقت بخیر خدمت همه دوستان

اقا من می تونم چند فایل رو بفرستم در اندروید قدیمی ولی برای جدید ها که فایل پراویدر می خواد نمی تونم این کار رو انجام بدم

با فایل پراویدر می تونم یک فایل بفرستم ولی چند تای نه

اگر دوستی می دونه لطفا بگه

پیشاپیش تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در ۱ ساعت قبل، ali mo گفته است :

سلام وقت بخیر خدمت همه دوستان

اقا من می تونم چند فایل رو بفرستم در اندروید قدیمی ولی برای جدید ها که فایل پراویدر می خواد نمی تونم این کار رو انجام بدم

با فایل پراویدر می تونم یک فایل بفرستم ولی چند تای نه

اگر دوستی می دونه لطفا بگه

پیشاپیش تشکر

سلام و درود. باید از اکشن Intent.ACTION_SEND_MULTIPLE برای این کار استفاده کنید.به متد جاوای زیر توجه کنید.تو خط  Uri.fromFile باید حواستون باشه از فایل پراویدر استفاده کنید

public static void shareMultiple(List<File> files, Context context){
    ArrayList<Uri> uris = new ArrayList<>();
    for(File file: files){
        uris.add(Uri.fromFile(file));
    }
    final Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    intent.setType("*/*");
    intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
    context.startActivity(Intent.createChooser(intent, context.getString(R.string.ids_msg_share)));
}

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  

ممنون استاد کد درست شده اشو هم این پایین می زارم که بقیه دوستان هم استفاده کنند

کلا مولتی  ارسال داخل اندروید کوچیک تر از api 24 (خو 24 نه)به صورت زیره که بدون دردسر میشه فرستاد و نیاز به فایل پرایودر نداره

Sub Activity_Create(FirstTime As Boolean)
   ShareMultipleImages(Array As String(File.Combine(File.DirRootExternal, "bitmap.png"), _
     File.Combine(File.DirRootExternal, "1.jpg")))
End Sub

Sub ShareMultipleImages(files As List)
   Dim i As Intent
   i.Initialize("android.intent.action.SEND_MULTIPLE", "")
   i.SetType("image/jpeg")
   Dim Uris As List
   Uris.Initialize
   For Each f As String In files
     Dim u As Uri
     u.Parse("file://" & f)
     Uris.Add(u)
   Next
   Dim jo As JavaObject = i
   jo.RunMethod("putParcelableArrayListExtra", Array As Object("android.intent.extra.STREAM", Uris))
   StartActivity(i)
End Sub

کد بالا برای ارل وکتابخونه هاشم JavaObject  و ContentResolver

ولی برای اندروید 24 به بعد که نیاز به file provider داره به شکل زیر باید عمل کنیم.

 

ابتدا داخل منفیست باید کد های زیر رو بزاریم

AddApplicationText(
  <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)

و کد زیرم داخل منفیست بزارید ولی اگر از کتابخونه پکیج منیجر یا هر کتابخونه دیگه که داخلش فایل پرو وایدر داره استفاده می کنید کد زیر رو نزارید چون خطا می ده

CreateResource(xml, provider_paths,
   <files-path name="name" path="shared" />
)

یک سورس پایین تر میزارم از داخلش کلاس file provider  رو بردارید با سرویس البته

بعد برای مولتی شیرینگ کد های زیر رو باید بزنید


		If pho.SdkVersion >= 24 Then
				

					
					
	
		Dim list As List ' لیست شامل فقط اسم فایل ها
		list.Initialize

		ProgressDialogShow2("لطفا صبر کنید و صفحه را ترک نکنید.",True)

		Sleep(200)
		Dim name_save As String
	

'  ابتدا باید فایل ها تون رو کپی کنید
	'تو مسیر فایل پرووایدر	
' که من اینجا فایل نصب برنامه ها رو گرفتم با کتابخونه پرشین پکیج
For i =0 To List_Select.Size - 1
		

			name_save =  pr.getAppInfo( List_Select.Get(i) ).AppName& ".apk"
		
			Wait For (File.CopyAsync("",pr.getAppInfo(List_Select.Get(i)).SourceDir, Starter.Provider.SharedFolder,name_save)) Complete (Success As Boolean)
			Log("Success: " & Success)
			If Success Then 	list.Add(name_save)
		

		Next
	
		ProgressDialogHide
	
'	InputList(list,list.Size,-1)
	
		ShareMultiplefile(list)
end if

 

و کد زیر به اکتویتی اضافه کنید


Sub ShareMultiplefile(files As List)
   Dim i As Intent
   i.Initialize("android.intent.action.SEND_MULTIPLE", "")
'   i.SetType("image/jpeg")
	i.SetType("*/*")
   Dim Uris As List
   Uris.Initialize
			
			
			For ii = 0 To files.Size-1
				
		Uris.Add(Starter.Provider.GetFileUri(files.Get(ii)))
				
			Next

   Dim jo As JavaObject = i
   jo.RunMethod("putParcelableArrayListExtra", Array As Object("android.intent.extra.STREAM", Uris))
   StartActivity(i)
End Sub

یک نکته هم در نظر داشته باشید که فایل های که کپی می کنید برای فایل پراویدر حتما بعد حذفشون کنید چون حافظه کش برنامه تون رو می بره بالا و از طرفی برنامه تون سنگین میشه تو گوشی کاربر

به صورت زیر میشه حذف کرد :

' برای حذف تابع زیر صدا بزنید
				Delete_Cash_send(True)

Sub Delete_Cash_send(Show_tose As Boolean)
	Try

Try
	
			Log(Starter.Provider.SharedFolder)
			Log(File.ListFiles(Starter.Provider.SharedFolder))
			Log(File.ListFiles(Starter.Provider.SharedFolder).Size)
			Log(size_folder_fa(Starter.Provider.SharedFolder))
	
	Catch
		
		End Try
	If Show_tose Then
		
	
				
				

		ToastMessageShow("حجم : " & size_folder_fa(Starter.Provider.SharedFolder),True)
	 Sleep(1000)
		ToastMessageShow("تعداد : " & File.ListFiles(Starter.Provider.SharedFolder).Size,True)
				

			If File.ListFiles(Starter.Provider.SharedFolder).Size == 0 Then
			
				ToastMessageShow("فایلی وجود ندارد.",True)
				Return
			End If
			ToastMessageShow("حذف شد.",True)
		
	End If
	Catch
		Log(LastException)
	End Try
	
	Try
		DeleteFolderRecursive(Starter.Provider.SharedFolder)
	Catch
		Log(LastException)
	End Try
	
	
End Sub

Sub size_folder_fa(a As String) As String
	Try
		Dim AfileUrils As AriaFileUtils

		
		Dim spacefoldr As Long
		spacefoldr = AfileUrils.SizeOfDirectory2(a)
		Dim chngest As String = AfileUrils.CalcSize_FA(spacefoldr)
	
		chngest = chngest.Replace("٫۰","")
		chngest = chngest.Replace("٫۱","/1")
		chngest = chngest.Replace("٫۲","/2")
		chngest = chngest.Replace("٫۳","/3")
		chngest = chngest.Replace("٫۴","/4")
		chngest = chngest.Replace("٫۵","/5")
		chngest = chngest.Replace("٫۶","/6")
		chngest = chngest.Replace("٫۷","/7")
		chngest = chngest.Replace("٫۸","/8")
		chngest = chngest.Replace("٫۹","/9")
	
		chngest = chngest.Replace("٫0","")
		chngest = chngest.Replace("٫1","/1")
		chngest = chngest.Replace("٫2","/2")
		chngest = chngest.Replace("٫3","/3")
		chngest = chngest.Replace("٫4","/4")
		chngest = chngest.Replace("٫5","/5")
		chngest = chngest.Replace("٫6","/6")
		chngest = chngest.Replace("٫7","/7")
		chngest = chngest.Replace("٫8","/8")
		chngest = chngest.Replace("٫9","/9")
	
		chngest = chngest.Replace(".0","")
		chngest = chngest.Replace(".1","/1")
		chngest = chngest.Replace(".2","/2")
		chngest = chngest.Replace(".3","/3")
		chngest = chngest.Replace(".4","/4")
		chngest = chngest.Replace(".5","/5")
		chngest = chngest.Replace(".6","/6")
		chngest = chngest.Replace(".7","/7")
		chngest = chngest.Replace(".8","/8")
		chngest = chngest.Replace(".9","/9")


		chngest = chngest.Replace(".۰","")
		chngest = chngest.Replace(".۱","/1")
		chngest = chngest.Replace(".۲","/2")
		chngest = chngest.Replace(".۳","/3")
		chngest = chngest.Replace(".۴","/4")
		chngest = chngest.Replace(".۵","/5")
		chngest = chngest.Replace(".۶","/6")
		chngest = chngest.Replace(".۷","/7")
		chngest = chngest.Replace(".۸","/8")
		chngest = chngest.Replace(".۹","/9")
	
		Return chngest
	Catch
		Log(LastException)
	End Try
End Sub


Sub FormatFileSize_Notoz(Bytes As Float) As String
	Try
		Private Unit() As String = Array As String(" بایت", " کیلو بایت", "مگابایت", " گیگ", "ترابایت", "", "", "", "")
   
		If Bytes = 0 Then
                    
			Return "0 بایت"
    
		Else
       
			Private Po, Si As Double
			Private I As Int
       
			Bytes = Abs(Bytes)
                            
			I = Floor(Logarithm(Bytes, 1024))
			Po = Power(1024, I)
			Si = Bytes / Po
       
			Return NumberFormat(Si, 0, 0) & Unit(I)
       
		End If
	Catch
		Log(LastException)
	End Try
End Sub

پایان

دانلود سورس و کلاس لازم کد های بالا

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...