NFC読み取り時にアプリを再起動させない方法について

964 views
Skip to first unread message

はしもと

unread,
Nov 13, 2012, 2:35:08 AM11/13/12
to android-g...@googlegroups.com
橋本と申します。
 
NFCをかざした際に、今現在起動しているアプリを再起動せずに
NFCのデータを取得する事は可能でしょうか?
BroadcastReceiverとIntentFilterを使用してIntentを受信出来ないか
試してみたのですが、上手く行きませんでした。
 
目的は、NFCから読み取ったデータを使ってアプリを操作する為です。
3Dモデルの描画をしていると、アプリを再起動する方法では直前の
状態を復元するのに時間が掛かる為、再起動させずに直接データの
読み込みが行いたいわけです。
 
以上、よろしくお願いします。

杉田敏典

unread,
Nov 13, 2012, 3:52:47 AM11/13/12
to android-g...@googlegroups.com
杉田です。
条件反射で書いてますので、検証はご自分でお願いします。

NFCで起動されるアプリと3Dを表示するアプリを別々にしておいて、メッセージだけやりとりすればいいんじゃないですか?
それとも、別アプリではなく、別Activityにしておいて、タスクを分けておくだけでもいいかもしれません。

--
杉田 敏典 on PC
sugi...@gmail.com


2012年11月13日 16:35 はしもと <doroi...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/aSowozwNfaoJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。

松岡 謙治

unread,
Nov 13, 2012, 7:36:53 AM11/13/12
to android-g...@googlegroups.com
こんにちわ、
九州GDGの松岡です。
NfcAdapterを使用することで可能です

まずonCreateでmAdapterを作成します
public void onCreate(Bundle savedInstanceState){
mAdapter = NfcAdapter.getDefaultAdapter(this);
boolean isNfcExist =
getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC);
if(mAdapter!=null && mAdapter.isEnabled() && isNfcExist){
mPendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*");
} catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
mFilters = new IntentFilter[] {
ndef,
};
mTechLists = new String[][] {
new String[]{NfcF.class.getName()}//その他必要なTechListsを追加
};
}
}

次に、onResume()でフォアグラウンドディスパッチを有効にします。
これにより、画面が開いている間NFCのIntentをフォアグラウンドのアクティビ
ティが処理するようになります。
(アプリが再起動しなくなります)
@Override
public void onResume() {
super.onResume();

if (mAdapter != null && mAdapter.isEnabled() ){
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)){
mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,
mTechLists);
}
}
}
新しいカードを認識した場合はonNewIntent(Intent intentが呼ばれます
@Override
public void onNewIntent(Intent intent) {
//いろんな処理
}
画面が消えるときはフォアグラウンドディスパッチを無効にするのを忘れずに
@Override
public void onPause() {
super.onPause();
if (mAdapter != null) mAdapter.disableForegroundDispatch(this);
}
soundFireでNFCを登録するときに使用しているテクニックです
と言うステマ
https://play.google.com/store/apps/details?id=org.firespeed.nfcboot

はしもと

unread,
Nov 13, 2012, 8:31:13 PM11/13/12
to android-g...@googlegroups.com
杉田様
 別アプリや別アクティビティとメッセージのやり取りが出来る事を
 知りませんでした。(勉強不足でした)
 今回は松岡様に教えて頂いた方法を試したいと思いますが、
 また違う機会に使えそうなテクニックですので、時間がある時に
 調べてみようと思います。
 
九州GDG松岡様
 ありがとう御座います。
 教えて頂いたソースで、onPause -> onNewIntent -> onResume
 と、onCreateさせずに動作させる事ができました。
 
Reply all
Reply to author
Forward
0 new messages