为什么以及如何在Android Studio中使用@ xml / file_paths资源?

时间:2018-02-03 14:59:48

标签: android android-studio android-resources

tl; dr:当我在运行时动态检索file_path时,为什么需要file_paths资源?

我目前正在通过构建自己的应用来学习Android Studio。 我现在想做的就是拍照,然后从中获取一些文字。 为了拍照并在以后使用它,我按照Android开发者的Taking Photos Simply指南进行操作。此时,建议使用File Provider

在清单中,文件提供程序添加如下:

String requestId = MediaManager.get().upload(uri).unsigned("test").option("public_id", uniqueId)
    .callback(new UploadCallback() {
@Override
public void onStart(String requestId) {

    if ((ProgressBar) findViewById(R.id.progressBarHorizontal) != null) {
        isPostUploading = true;
        ((ImageView) findViewById(R.id.img_video_icon)).setVisibility(View.GONE);
        ((RelativeLayout) findViewById(R.id.progressBarDialog)).setVisibility(View.VISIBLE);
        ((ImageView) findViewById(R.id.imgPreview)).setImageBitmap(bitmap);
        ((ImageView) findViewById(R.id.imgPreview)).setVisibility(View.VISIBLE);
        ((ProgressBar) findViewById(R.id.progressBarHorizontal)).setProgress(0);
    }
}
@Override
public void onProgress(String requestId, long bytes, long totalBytes) {
}
@Override
public void onSuccess(String requestId, Map resultData) {
    String img3 = uniqueId + ".jpg";
    String url = MediaManager.get().url().generate(img3);
    new PublishPostTask().execute(desc, role_id, "image", uniqueId, url);
    Log.d("msg", "role_id : " + role_id);
}
@Override
public void onError(String requestId, ErrorInfo error) {
    String er = String.valueOf(error);
    Toast.makeText(HomeActivity.this, "error : " + er, Toast.LENGTH_LONG).show();
}
@Override
public void onReschedule(String requestId, ErrorInfo error) {
}
}).dispatch();

我正在努力使用<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.mydomain.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> ,尤其是meta-data

拍摄照片简单教程中,这是XML的必要补充,使其工作:

android:resource=@xml/file_paths"

所以我的问题是:我应该遵循的开发者指南中的良好做法是什么,我该怎么做?

编辑:为了让事情变得更清楚,我无法理解如何在这里使用资源。 这是指南中的方法代码:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/com.example.package.name/files/Pictures" />
</paths>

所以我在应用程序的运行时期间动态获取文件的名称(以及它的文件路径)。 那是什么文件/路径,我不明白它的用法。

1 个答案:

答案 0 :(得分:0)

res 目录中创建一个文件夹并将其命名为 xml,在其中创建一个文件 file_paths 并将所有内容替换为: >

SELECT DISTINCT
   TOP(50) cam.UserID AS PatientID,
   mppi.DisplayName AS Surgeon,
   ISNULL(sci.IOPStatus, 'N/A') AS Status,
   tkstat.TrackerStatusID AS Stat_2
FROM
   Main AS cam 
   INNER JOIN
      Providers AS rap 
      ON cam.VisitID = rap.VisitID 
   INNER JOIN
      ProviderInfo AS mppi 
      ON rap.UnvUserID = mppi.UnvUserID 
   LEFT OUTER JOIN
      Inop AS sci 
      ON cam.CwsID = sci.CwsID 
   LEFT OUTER JOIN
      TrackerStatus AS tkstat 
      ON cam.CwsID = tkstat.CwsID 
WHERE
   (
      cam.Location_ID IN 
      (
         'SURG'
      )
   )
   AND 
   (
      rap.IsAttending = 'Y'
   )
   AND 
   (
      cam.DateTime BETWEEN CONCAT(CAST(GETDATE() AS DATE), ' 00:00:00') AND CONCAT(CAST(GETDATE() AS DATE), ' 23:59:59')
   )
   AND 
   (
      cam.Status_StatusID != 'Cancelled'
   )
ORDER BY
   cam.UserID ASC

如果您想预览该教程中捕获的图像,则将文件从其路径解码为位图,然后从 onActivityResult()

将其显示到 ImageView 上
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="my_images" path="Pictures" />
</paths>