ICS で Android Beam 機能をプログラムでアクティブ化または非アクティブ化しようとしましたが、このための API が見つかりません。出来ますか ?
また、プッシュ操作を開始する前に Android Beam 機能が有効になっているかどうかもわかります。出来ますか ?
ICS で Android Beam 機能をプログラムでアクティブ化または非アクティブ化しようとしましたが、このための API が見つかりません。出来ますか ?
また、プッシュ操作を開始する前に Android Beam 機能が有効になっているかどうかもわかります。出来ますか ?
携帯電話の設定で、Android ビーム機能を有効または無効にすることができます (ワイヤレス ネットワーク -> 詳細... -> Android ビーム)。通常のアプリには、これをオンまたはオフにするために必要なアクセス許可がありません (そして API はありません)。ただし、アプリからインテントを送信して、 を使用してこの設定画面を直接開くことができますnew Intent(Settings.ACTION_WIRELESS_SETTINGS)
。
Android 4.1 JB では、新しい API 呼び出しNfcAdapter.isNdefPushEnabled()が追加され、 Android Beam がオンかオフかを確認します。
ところで: Android ビームが無効になっていても、NFC がオンになっている限り、デバイスは引き続きビーム メッセージを受信できます。
Android のバージョンと現在の状態に基づいて、どの設定画面を表示するかを具体的に選択できます。これが私がそれをした方法です:
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
@TargetApi(14)
// aka Android 4.0 aka Ice Cream Sandwich
public class NfcNotEnabledActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= 16) {
/*
* ACTION_NFC_SETTINGS was added in 4.1 aka Jelly Bean MR1 as a
* separate thing from ACTION_NFCSHARING_SETTINGS. It is now
* possible to have NFC enabled, but not "Android Beam", which is
* needed for NDEF. Therefore, we detect the current state of NFC,
* and steer the user accordingly.
*/
if (NfcAdapter.getDefaultAdapter(this).isEnabled())
intent.setAction(Settings.ACTION_NFCSHARING_SETTINGS);
else
intent.setAction(Settings.ACTION_NFC_SETTINGS);
} else if (Build.VERSION.SDK_INT >= 14) {
// this API was added in 4.0 aka Ice Cream Sandwich
intent.setAction(Settings.ACTION_NFCSHARING_SETTINGS);
} else {
// no NFC support, so nothing to do here
finish();
return;
}
startActivity(intent);
finish();
}
}
(私はここにこのコードをパブリック ドメインに置きます。ライセンス条項や帰属は必要ありません)