Sharing Files with NFC ->Receiving Files from Another Device

    xiaoxiao2025-09-03  350

    在接收到到NFC发送过来的数据后,会存放到一个特殊的目录中。同时会调用Android Media Scanner,将文件添加到MediaStore provide 中. 在接收端接收完成文件后,会发送一个带有intent且action为ACTION_VIEW一节MIME type,uri的notification。当用户点击这个notification的时候,这个notification就发出了。为响应这个intent,需要在manifest文件中听见<intent-filter>     <activity         android:name="com.example.android.nfctransfer.ViewActivity"         android:label="Android Beam Viewer" >         ...         <intent-filter>             <action android:name="android.intent.action.VIEW"/>             <category android:name="android.intent.category.DEFAULT"/>             ...         </intent-filter>     </activity> 必须要指定action 和 category。 通过nfc接收的文件一般放在外部存储中。如果想将文件copy到app的内部存储中,需要访问sd卡权限. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 可以通过Uri.getScheme()来判断接收到的是file还是content. public class MainActivity extends Activity {     ...     // A File object containing the path to the transferred files     private File mParentPath;     // Incoming Intent     private Intent mIntent;     ...     /*      * Called from onNewIntent() for a SINGLE_TOP Activity      * or onCreate() for a new Activity. For onNewIntent(),      * remember to call setIntent() to store the most      * current Intent      *      */     private void handleViewIntent() {         ...         // Get the Intent action         mIntent = getIntent();         String action = mIntent.getAction();         /*          * For ACTION_VIEW, the Activity is being asked to display data.          * Get the URI.          */         if (TextUtils.equals(action, Intent.ACTION_VIEW)) {             // Get the URI from the Intent             Uri beamUri = mIntent.getData();             /*              * Test for the type of URI, by getting its scheme value              */             if (TextUtils.equals(beamUri.getScheme(), "file")) {                 mParentPath = handleFileUri(beamUri);             } else if (TextUtils.equals(                     beamUri.getScheme(), "content")) {                 mParentPath = handleContentUri(beamUri);             }         }         ...     }     ... } 如果是文件的话。可以通过getPath()得到文件的觉得路径     public String handleFileUri(Uri beamUri) {         // Get the path part of the URI         String fileName = beamUri.getPath();         // Create a File object for this filename         File copiedFile = new File(fileName);         // Get a string containing the file's parent directory         return copiedFile.getParent();     } 可以通过Uri.getAuthority()得到和uri关联的content provide.为从MediaStore content uri得到路径,可以query查询,例程如下:  public String handleContentUri(Uri beamUri) {         // Position of the filename in the query Cursor         int filenameIndex;         // File object for the filename         File copiedFile;         // The filename stored in MediaStore         String fileName;         // Test the authority of the URI         if (!TextUtils.equals(beamUri.getAuthority(), MediaStore.AUTHORITY)) {             /*              * Handle content URIs for other content providers              */         // For a MediaStore content URI         } else {             // Get the column that contains the file name             String[] projection = { MediaStore.MediaColumns.DATA };             Cursor pathCursor =                     getContentResolver().query(beamUri, projection,                     null, null, null);             // Check for a valid cursor             if (pathCursor != null &&                     pathCursor.moveToFirst()) {                 // Get the column index in the Cursor                 filenameIndex = pathCursor.getColumnIndex(                         MediaStore.MediaColumns.DATA);                 // Get the full file name including path                 fileName = pathCursor.getString(filenameIndex);                 // Create a File object for the filename                 copiedFile = new File(fileName);                 // Return the parent directory of the file                 return new File(copiedFile.getParent());              } else {                 // The query didn't work; return null                 return null;              }         }     }
    转载请注明原文地址: https://ju.6miu.com/read-1302278.html
    最新回复(0)