2016-08-18 30 views
1

ボタンをクリックすると、別のスマートフォンに画像をNFC経由で送信する方法があります。コードは正しいと思われ、実行はコードの最後の行に到着しますが、何も起こりません。どちらのスマートフォンにもNFCとAndroid Beamがあります。すべてのヘルプはクリックで起動することはできませんNFCを使用して画像を送信できません

答えて

0

ビーム通信をいただければ幸いです

public void sendFile(View view){ 
    nfcAdapter=NfcAdapter.getDefaultAdapter(this); 

    if(!nfcAdapter.isEnabled()){ 
     Toast.makeText(this,"Please enable NFC",Toast.LENGTH_SHORT).show(); 
     startActivity(new Intent(Settings.ACTION_NFC_SETTINGS)); 
    } else if (!nfcAdapter.isNdefPushEnabled()) { 
     Toast.makeText(this,"Please enable android beam",Toast.LENGTH_SHORT).show(); 
     startActivity(new Intent(Settings.ACTION_NFCSHARING_SETTINGS)); 
    } else { 
     //If we got here, Nfc and Android beam are enabled 
     Toast.makeText(this,"Ok",Toast.LENGTH_SHORT).show(); 

     String fileName="test.jpg"; 
     File fileDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     File fileToTransfer =new File(fileDirectory,fileName); 

     Toast.makeText(this,"Tutto Ok2",Toast.LENGTH_SHORT).show(); 
     fileToTransfer.setReadable(true,false); 
     Uri fileUri=Uri.fromFile(fileToTransfer); 
     if(fileUri==null){ 
      Toast.makeText(this,"File not found",Toast.LENGTH_SHORT).show(); 
     } else{ 
      //If we got here, the app has found the image and is ready to send it 
      Toast.makeText(this,"Tutto Ok3",Toast.LENGTH_SHORT).show(); 
      //Send the image 
      nfcAdapter.setBeamPushUris(new Uri[]{Uri.fromFile(fileToTransfer)},this); 
     } 

    } 

:ここではコードです。 Sharing Files with NFC

は、公式ドキュメントを参照してください

この機能は、単純なAPIを持っており、ユーザーは簡単に触れるデバイスによって転送 プロセスを開始することができます。

ビーム通信をアクティブにするには、1つのデバイスが他のデバイスに接触する必要があります。 クリックでビームを転送することはできますが、デバイスはタッチした後でなければなりません。

お読みください:例えば

を別のデバイスにファイルを送信する:

public class MainActivity extends Activity { 

    NfcAdapter mNfcAdapter; 
    // Flag to indicate that Android Beam is available 
    boolean mAndroidBeamAvailable = false; 

    // Instance that returns available files from this app 
    private FileUriCallback mFileUriCallback; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // NFC isn't available on the device 
     if (!PackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)){ 
      /* 
      * Disable NFC features here. 
      * For example, disable menu items or buttons that activate 
      * NFC-related features 
      */ 
      ... 
      // Android Beam file transfer isn't supported 
     } else if (Build.VERSION.SDK_INT < 
       Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      // If Android Beam isn't available, don't continue. 
      mAndroidBeamAvailable = false; 
      /* 
      * Disable Android Beam file transfer features here. 
      */ 
      ... 
      // Android Beam file transfer is available, continue 
     } else { 
      mNfcAdapter = NfcAdapter.getDefaultAdapter(this); 
      /* 
      * Instantiate a new FileUriCallback to handle requests for 
      * URIs 
      */ 
      mFileUriCallback = new FileUriCallback(); 
      // Set the dynamic callback for URI requests. 
      mNfcAdapter.setBeamPushUrisCallback(mFileUriCallback,this); 
     } 
    } 


    /** 
    * Callback that Android Beam file transfer calls to get 
    * files to share 
    */ 
    private class FileUriCallback implements 
      NfcAdapter.CreateBeamUrisCallback { 
     public FileUriCallback() { 
     } 
     /** 
     * Create content URIs as needed to share with another device 
     */ 
     @Override 
     public Uri[] createBeamUris(NfcEvent event) { 
      // List of URIs to provide to Android Beam 
      Uri[] mFileUris = new Uri[1]; 

      String transferFile = "transferimage.jpg"; 
      File extDir = getExternalFilesDir(null); 
      File requestFile = new File(extDir, transferFile); 
      requestFile.setReadable(true, false); 
      // Get a URI for the File and add it to the list of URIs 
      fileUri = Uri.fromFile(requestFile); 
      if (fileUri != null) { 
       mFileUris[0] = fileUri; 
      } else { 
       Log.e("My Activity", "No File URI available for file."); 
      } 
      return mFileUris; 
     } 
    } 
} 
+0

このコードを使用しても、NFCは動作しません。イメージは存在しますが、送信しません(当然、リソースのパスを変更しました) –

+0

編集:私の最初のコードとして、それは10のうち1時間働いています。なぜ私は理解しません –

+0

どのステップはうまくいかないのですか?タッチまたは転送中にまたは...あなたはlogcatにログインしていますか? – LaurentY

0

は別のスマートフォンを使用して解決しました。コードは正しく動作します。一部のデバイスにはNFCに関する問題があります(LG G2とNexus 5でテスト済み)

関連する問題