I am getting the exception error: 'Unable to get provider androidx.core.content.FileProvider: java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data
Here is a bit of my code:
public void SendMMSMessage()
{
Android.Telephony.SmsManager smsMessage = Android.Telephony.SmsManager.Default;
IList<string> divideContents = smsMessage.DivideMessage("I auto sent this message to you! No typing here!!!!!");
string filePath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures) + "/TestPic.jpg";
byte[] sendPDUData = GetMMSPDUData("11111111111", filePath, "Hey this image was sent from my phone using code! No typing here");
if (sendPDUData != null)
{
SendMMSData(sendPDUData);
}
}
public byte[] GetMMSPDUData(string DestinationNumber, string AudioFilePath, string smsMessage)
{
byte[] pduData = null;
try
{
SendReq sendReq = new SendReq();
sendReq.AddTo(new EncodedStringValue(DestinationNumber));
PduBody pduBody = new PduBody();
// Add text message data to message
PduPart txtPart = new PduPart();
txtPart.SetData(Encoding.ASCII.GetBytes(smsMessage));
txtPart.SetContentType(new EncodedStringValue("text/plan").GetTextString());
txtPart.SetName(new EncodedStringValue("Message").GetTextString());
pduBody.AddPart(txtPart);
// Add image data
// TODO: Later, this will be audio file. But image file for testing
PduPart imgPart = new PduPart();
byte[] sampleImageData = System.IO.File.ReadAllBytes(AudioFilePath);
imgPart.SetData(sampleImageData);
imgPart.SetContentType(new EncodedStringValue("image/jpg").GetTextString());
imgPart.SetFilename(new EncodedStringValue(System.IO.Path.GetFileName(AudioFilePath)).GetTextString());
pduBody.AddPart(imgPart);
// Now create body of MMS
sendReq.Body = pduBody;
// Finally, generate the byte array to send to the MMS provider
PduComposer composer = new PduComposer(sendReq);
pduData = composer.Make();
}
catch(Exception ex)
{
// TODO: Do something here
}
return pduData;
}
public bool SendMMSData(byte[] PDUData)
{
Context CTX = Android.App.Application.Context;
Android.Telephony.SmsManager sm = Android.Telephony.SmsManager.Default;
Random rnd = new Random();
try
{
string cacheFilePath = System.IO.Path.Combine(CTX.CacheDir.AbsolutePath, "send." + "sendMe" + ".dat");
System.IO.File.WriteAllBytes(cacheFilePath, PDUData);
Java.IO.File testFile = new Java.IO.File(cacheFilePath);
string authString = CTX.PackageName + ".fileprovider";
if (System.IO.File.Exists(cacheFilePath))
{
Android.Net.Uri contentURI = AndroidX.Core.Content.FileProvider.GetUriForFile(CTX, CTX.PackageName + ".fileprovider", testFile);
// Android.Net.Uri contentURI = Android.Net.Uri.FromFile(testFile).Au
/* Android.Net.Uri contentURI = (new Android.Net.Uri.Builder())
.Authority(authString)
.Path(cacheFilePath)
.Scheme(ContentResolver.SchemeContent)
.Build();
*/
/*
* = (new Android.Net.Uri.Builder())
.Authority(ctx.PackageName + ".fileprovider")
.Path(cacheFilePath)
.Scheme(ContentResolver.SchemeContent)
.Build();
*/
PendingIntent pendingIntent = PendingIntent.GetBroadcast(CTX, 0, new Intent(CTX.PackageName + ".WAP_PUSH_DELIVER"), 0);
sm.SendMultimediaMessage(CTX, contentURI, null, null, null);
}
}
catch(Exception ex)
{
String exString = ex.ToString();
return false;
}
return true;
}
Also, here is my Manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.janinesafety2" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
<application android:label="janinesafety2.Android">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.suport.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
/>
</provider>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
</manifest>
and my Provider_path
<?xml version="1.0" encoding="utf-8" ?>
<paths>
<external-path
name="external_file"
path="./"
/>
</paths>
I have used these as resources to assist me in debugging:
androidx FILE_PROVIDER_PATHS Unable to get provider androidx.core.content.FileProvider: java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data?
And unfortuntaly, I am still having issues with the expection. From what I can tell I am doing the exact thing everyone is saying.
Is there anyone there that can take a second a look at my code? Maybe I missed something.
Thank you.