プログラム プロバイダーは、当社の別のアプリのプロバイダーを記述します。プロバイダーには、データにアクセスするためのアクセス許可が必要です。
また、NFC を使用して json データを別のデバイスに送信する必要があるインターフェイスもあります。
CreateNdefMessageCallback.createNdefMessageのようにプロバイダーにアクセスすると
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
Context context = this;
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(Uri.parse("content://demo/data-lists"),
null,
null,
null,
null);
// FIXME Strange: Will never goes here ...
mMessage = getMessage(cursor);
NdefMessage msg = new NdefMessage(
new NdefRecord[] {
createMimeRecord(mMimeType, mMessage.getBytes())
});
return msg;
}
非常に奇妙なことがあります。許可を削除するまで、カーソルを取得することはありません。
許可宣言
<permission
android:name="com.client.permission.MY_PERMISSION"
android:label="@string/provider_label"
android:protectionLevel="signatureOrSystem" />
許可を求める
<uses-permission android:name="com.client.permission.MY_PERMISSION" />
プロバイダ許可宣言
<provider
android:name=".provider.DemoProvider"
android:authorities="demo"
android:multiprocess="true"
android:permission="com.client.permission.MY_PERMISSION" />
現在、プロバイダーと同じアプリケーション内の NFC 送信アクティビティとプロバイダー データの読み取りは、NFC コールバックによって行われます。プロバイダーのアクセス許可を削除すると、これは正常に機能します。以下のような
勝手に提供者
<provider
android:name=".provider.DemoProvider"
android:authorities="demo"
android:multiprocess="true"/>
助けてください。ありがとう。
UPDATED 2013-03-14 とても奇妙です。この問題は、プロバイダと NFC アクティビティが同じアプリケーション内にある場合にのみ見つかりました。このような。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nfcdemo"
android:versionCode="6"
android:versionName="build-svn291" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<permission
android:name="com.client.permission.MY_PERMISSION"
android:label="@string/provider_label"
android:protectionLevel="signatureOrSystem" />
<uses-permission android:name="com.client.permission.MY_PERMISSION" />
<activity
android:name=".ui.MainTabActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name=".provider.DemoProvider"
android:authorities="demo"
android:multiprocess="true"
android:permission="com.client.permission.MY_PERMISSION" />
</manifest>
しかし、私が2つの別々のアプリケーションを使用する場合、それはうまくいきます.
<!-- Application Provider -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nfcdemo.provider"
android:versionCode="6"
android:versionName="build-svn291" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<permission
android:name="com.client.permission.MY_PERMISSION"
android:label="@string/provider_label"
android:protectionLevel="signatureOrSystem" />
<provider
android:name=".provider.DemoProvider"
android:authorities="demo"
android:multiprocess="true"
android:permission="com.client.permission.MY_PERMISSION" />
</manifest>
<!-- Application UI -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nfcdemo.ui"
android:versionCode="6"
android:versionName="build-svn291" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="com.client.permission.MY_PERMISSION" />
<activity
android:name=".ui.MainTabActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</manifest>