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

حل خطای نوشتن در کارت حافظه


hosseinkarimian

سوال

 

با سلام مشکل دسترسی به نوشتن کارت حافظه در گوشی با حافظه داخلی 16 به بالا از کتابخانه M_SdCard_Utils طبق توضیح خودش استفاده کردم آدرس رو بر می گردون ولی در کارت sd فایل ایجاد نمیشه .

کد مر بوط به M_SdCard_Utils نیست این کد آدرس حافظه هایی که روی گوشی فعاله بر می گردونه بعد در حافظه آخری که کارت sd می نویسه.

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("1")

	Dim paths() As Object = GetContext.RunMethod("getExternalFilesDirs", Array(Null))
	For Each p As Object In paths
		Dim s As String
		s=p
		s=s.Replace("Android/data/b4a.examplef/files","")
		'		File.WriteString(s,"ddddddd.txt","sadasdasd")
		Log(p)
		Log(s)
		
		
		
				
	Next
	Dim Writer As TextWriter
	Writer.Initialize(File.OpenOutput(s,"dad.txt",False))
	Writer.WriteLine("This is the first line.")
	Writer.WriteLine("This is the second line.")
	Writer.Close
	
End Sub
Sub GetContext As JavaObject
	Return GetBA.GetField("context")
End Sub

Sub GetBA As JavaObject
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class ".Length)
	jo.InitializeStatic(cls)
	Return jo.GetFieldJO("processBA")
End Sub

کد منیفیست

'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="22"/>
<supports-screens android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
'End of default text.
'BSfileChooser
AddManifestText(<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />)
	AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)

 

وقتی اجرا می کنم خطای زیر

 

 

Error occurred on line: 59 (Main)
java.io.FileNotFoundException: /storage/6DAE-18FF/dad.txt: open failed: EACCES (Permission denied)
	at libcore.io.IoBridge.open(IoBridge.java:452)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
	at anywheresoftware.b4a.objects.streams.File.OpenOutput(File.java:370)
	at java.lang.reflect.Method.invoke(Native Method)
	at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:710)
	at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:339)
	at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:249)
	at java.lang.reflect.Method.invoke(Native Method)
	at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:139)
	at ariafile.example.main.afterFirstLayout(main.java:102)
	at ariafile.example.main.access$000(main.java:17)
	at ariafile.example.main$WaitForLayout.run(main.java:80)
	at android.os.Handler.handleCallback(Handler.java:739)
	at android.os.Handler.dispatchMessage(Handler.java:95)
	at android.os.Looper.loop(Looper.java:148)
	at android.app.ActivityThread.main(ActivityThread.java:7325)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
	at libcore.io.Posix.open(Native Method)
	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
	at libcore.io.IoBridge.open(IoBridge.java:438)
	... 18 more

 

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

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

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

دوست عزیز قبل از اینکه از کتابخونه استفاده کنید حتما باید دستری نوشتن روی کارت رو به صورت رانتایم بگیرید. در مورد رانتایم بسیار بحث شده. سرچ کنید و اگه به نتیجه نرسیدید تا راهنمایی بشین. این تاپیک کافیه واستون ازش استفده کنید فقط به جای دوربین دسترسی حافظه بدین

 

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

در 3 ساعت قبل، محمدرضا شاهپیری گفته است :

دوست عزیز قبل از اینکه از کتابخونه استفاده کنید حتما باید دستری نوشتن روی کارت رو به صورت رانتایم بگیرید. در مورد رانتایم بسیار بحث شده. سرچ کنید و اگه به نتیجه نرسیدید تا راهنمایی بشین. این تاپیک کافیه واستون ازش استفده کنید فقط به جای دوربین دسترسی حافظه بدین

 

سلام خدمت آقای شاهپری عزیز من runtime هم گرفتم فایده ای نداره یکی از بزرگترین مشکلات b4a که هنوز نتونستم حلش کنم همینه خواهش می کنم که کمک کنید خیلی برام مهمه.

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

چجوری رانتایم گرفتید شما؟

 

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

RuntimePermissions اجازه از کاربر می گیره حتی لیست فایلل و پوشه رو هم می گیره ولی موقع نوشتن برنامه فورز کلوز می شه :gamer2:

	
	
#Region  Project Attributes 
	#ApplicationLabel: B4A Example
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region

Sub Process_Globals

End Sub

Sub Globals
	Dim run As RuntimePermissions
End Sub

Sub Activity_Create(FirstTime As Boolean)


	run.CheckAndRequest(run.PERMISSION_WRITE_EXTERNAL_STORAGE)
	
	
End Sub
Sub GetContext As JavaObject
	Return GetBA.GetField("context")
End Sub

Sub GetBA As JavaObject
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class ".Length)
	jo.InitializeStatic(cls)
	Return jo.GetFieldJO("processBA")
End Sub

Sub Activity_PermissionResult (Permission As String, Result As Boolean)
	If Permission = run.PERMISSION_WRITE_EXTERNAL_STORAGE Then
		If Result Then
			
			Dim paths() As Object = GetContext.RunMethod("getExternalFilesDirs", Array(Null))
			For Each p As Object In paths
				Dim s As String
				s=p
				s=s.Replace("Android/data/b4a.examplef/files","")

				Log(p)
				Log(s)
		
		
		
				
			Next
			Dim ll As List
			ll.Initialize
			ll.Clear
			ll=File.ListFiles(s)
			Dim Writer As TextWriter
			Writer.Initialize(File.OpenOutput(s,"dad.txt",False))
			Writer.WriteLine("This is the first line.")
			Writer.WriteLine("This is the second line.")
			Writer.Close
			
	
		End If
	End If
	
	
End Sub

 

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

دوست عزیز (open failed: EACCES (Permission denied ربطی به دسترسی نداره اصلا. در صورتی که دسترسی فعال نباشه اکسپشنی که به وجود میاد SecurityException هست در حالی که برای شما اکسپشن NotFoundException به وجود اومده که یعنی فایل پیدا نشده.

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

دستگاهی که دارین تست میکنین چیه و نسخه اندرویدتون چنده؟

گذشته از این متدی که شما استفاده کردین کار خاصی نمیکنه فقط یه مسیر برمیگردونه که این کارو میگین کتابخونه M_SdCard_Utils هم انجام میده. پس لزومی نداره که از این متد استفاده کنین. اگه کتابخونه نتونه بنویسه بیسیک دیگه عمرا بتونه بنونه بنویسه. کتابخونه ای که توش استفاده شده org.apache.commons هست که واقعا بی نظیره.

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

بایگانی شده

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

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

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