###前提・実現したいこと
ListFragmentから onListItemClickで選択したリストのデータUriを取得して、
送信用のFragment内で、Uriを渡しNfc(Android Beam4.1)で送信したい。
###発生している問題・エラーメッセージ
ListFragmentから取得したUriが、送信用のフラグメントで、Nfc を使おうとすると、null となってしまう。
###該当のソースコード
package com.example.nfcbtsspsend; import android.app.Activity; import android.app.Fragment; import android.net.Uri; import android.nfc.NfcAdapter; import android.nfc.NfcEvent; import android.os.Bundle; import android.os.Parcel; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import java.util.List; public class SendDataFragment extends Fragment implements NfcAdapter.CreateBeamUrisCallback{ String sendUri_string; Uri sendUri; NfcAdapter mNfcAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Activity a = getActivity(); View v = inflater.inflate(R.layout.senddata_fragment, container, false); //MainFragmentからリスト化するデータ拡張子を受け取る Bundle bundle = getArguments(); sendUri_string = bundle.getString("Uri"); sendUri.parse(sendUri_string); TextView data_name_textView = (TextView)v.findViewById(R.id.send_data_name_tv); data_name_textView.setText(sendUri_string); //Nfcを読み込む mNfcAdapter = NfcAdapter.getDefaultAdapter(a); if(mNfcAdapter == null){data_name_textView.setText(R.string.notNFC);} //NFC not available on this device. mNfcAdapter.setNdefPushMessageCallback(null, a); mNfcAdapter.setBeamPushUrisCallback(this, a); return v; } @Override public Uri[] createBeamUris(NfcEvent nfcEvent) { Log.i("TAG", "Beam event in progress; createBeamUris() called."); // Images are served using a content:// URI. See AssetProvider for implementation. Bundle bundle = getArguments(); sendUri_string = bundle.getString("Uri"); sendUri.parse(sendUri_string); Log.i("TAG", "Sending URI: " + sendUri); return new Uri[] {sendUri}; } }
###試したこと
uri.parse(String);
の方法で、String型からUri型に直す。
これが、うまく変換されていないのでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
渡すのは音源データ、またはpdfなどのデータの予定です。
現段階では、ListFragmentに音楽ファイル(mp3など)を、
Cursor cursor = cr.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,…
を使用し取得。
ListFragmentからUriをString型で、送信用Fragmentに引き継ぎ。
送信用のFragmentのTextViewには、
「content://media/external/audio/media/5」
引き継いだUri情報(String型)は表示できている。
###追加記入
頂いたコメントを元に、追加させて頂きました。
ListFragmentのItemをタップし、
送信用のSendDataFragmentで、スマホ同士をNFCで接続させたところまでのログ出力です。
恐れいりますが、お知恵をお貸し頂けると、非常に助かります。
//ListFragment 07-19 22:14:08.907 17177-17177/com.example.nfcbtsspsend D/TAG: onListItemClick position => 1 : id => 1 07-19 22:14:08.919 17177-17177/com.example.nfcbtsspsend I/TAG: Sending URI: content://media/external/audio/media/1:onListItemClick 07-19 22:14:08.919 17177-17177/com.example.nfcbtsspsend I/TAG: sendUri_string: content://media/external/audio/media/1:onListItemClick //SendDataFragment 07-19 22:14:09.036 17177-17177/com.example.nfcbtsspsend I/FloatingActionButton: Setting a custom background is not supported. 07-19 22:14:09.089 17177-17177/com.example.nfcbtsspsend I/TAG: Sending URI: null:onCreateView 07-19 22:14:09.089 17177-17177/com.example.nfcbtsspsend I/TAG: sendUri_string: content://media/external/audio/media/1:onCreateView 07-19 22:15:08.450 17177-17360/com.example.nfcbtsspsend I/TAG: Beam event in progress; createBeamUris() called. 07-19 22:15:08.450 17177-17360/com.example.nfcbtsspsend I/TAG: Sending URI: null:createBeamUris 07-19 22:15:08.450 17177-17360/com.example.nfcbtsspsend I/TAG: sendUri_string: content://media/external/audio/media/1:createBeamUris 07-19 22:15:08.450 17177-17360/com.example.nfcbtsspsend E/NFC: Uri not allowed to be null.
改めて、追記させて頂きました。
確認したところ、
sendUri.parse(sendUri_string);
で、String型 を Uri型 に変換ができていないようです。
この部分をどのようにすれば、変換が可能でしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/19 11:59
2016/07/19 12:17
2016/07/19 13:06
2016/07/19 13:15
2016/07/19 13:36
2016/07/19 13:39
2016/07/19 13:53