سؤال

ما كنت أحاول القيام به هو إرسال عدد صحيح واستلامه ثم أخذ هذا العدد الصحيح وتعيينه على المؤقت الذي يعد العد التنازلي.حتى الآن أنا قادر على إرسال عدد صحيح ويكون التطبيق مفتوحا على الجهاز الآخر ، ولكن عندما يقوم الجهاز بتحميل النشاط ، فإنه يفتح ميناكتيفيتي وليس النشاط نيوغام.يجب أن أعترف في هذه المرحلة أنا لست رمز الذكية وقليلا من المبتدئ ولكن هنا هو مقتطف من التعليمات البرمجية التي تتعامل مع الاتصالات نفك ، وهذا المقتطف هو من نيوغام.جافا:

@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    int time = bomb1.getTimer();
    String message = ( " " + time);
    NdefMessage msg = new NdefMessage(
            new NdefRecord[] { NdefRecord.createMime(
                    "application/vnd.com.Jhadwin.passthebomb.newgame" ,message.getBytes())
                    ,NdefRecord.createApplicationRecord("com.Jhadwin.passthebomb")
    });
    return msg;
}    
@Override
public void onResume() {
    super.onResume();
    // Check to see that the Activity started due to an Android Beam
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
        processIntent(getIntent());
    }
}

@Override
public void onNewIntent(Intent intent) {
    // onResume gets called after this to handle the intent
    setIntent(intent);
}

/**
 * Parses the NDEF Message from the intent and prints to the TextView
 */
 void processIntent(Intent intent) {
    Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
            NfcAdapter.EXTRA_NDEF_MESSAGES);
    // only one message sent during the beam
    NdefMessage msg = (NdefMessage) rawMsgs[0];
    // record 0 contains the MIME type, record 1 is the AAR, if present
    String newtimermsg = new String(msg.getRecords()[0].getPayload());
    timeremtextview.setText(newtimermsg);
    int newtimer = Integer.parseInt(newtimermsg);
    bomb1.setTimer(newtimer);
    bomb1.setState(true);
}

كما قد تلاحظ يتم تكييف هذا الرمز من المثال نفك على موقع جوجل ، قد يكون موضع تقدير أي مساعدة.

وشملت أيضا هو جزء التطبيق من الروبوتواضح.شمل

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.Jhadwin.passthebomb.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>            
    </activity>
    <activity android:name="com.Jhadwin.passthebomb.newgame"/>
    <activity android:name="com.Jhadwin.passthebomb.About"/>
    <activity android:name="com.Jhadwin.passthebomb.Help"/>
</application>
هل كانت مفيدة؟

المحلول

إذا كنت تستخدم سجل تطبيق الروبوت (أر) ولا تحدد NDEF_DISCOVERED تصفية النية في بيان التطبيق الخاص بك ، لن يعرف الروبوت أن التطبيق يمكنك التعامل مع نية نفك عند إطلاق.وبالتالي ، فإنه سيتم فتح النشاط الأول من البيان الخاص بك الذي يعلن أ MAIN تصفية النية مع الفئة LAUNCHER دون تمرير رسالة ندف المستلمة.حتى في قضيتك, com.Jhadwin.passthebomb.MainActivity سيتم استخدامها.

من أجل الحصول على الروبوت لتمرير نية نفك (بما في ذلك رسالة ندف المستلمة) إلى الخاص بك newgame النشاط ، ستحتاج إلى إضافة عامل تصفية نية مناسب:

<activity android:name="com.Jhadwin.passthebomb.newgame">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="application/vnd.com.jhadwin.passthebomb.newgame" />
    </intent-filter>
</activity>

لاحظ أن مرشحات القصد في الروبوت هي حساس لحالة الأحرف.من أجل تجنب القضايا مع أنواع مختلطة الحالة ، الروبوت تلقائيا بتحويل أنواع التمثيل الصامت ومنتدى نفك أسماء نوع الخارجية ل حالة أقل (عادة ما تكون أسماء الأنواع هذه غير حساسة لحالة الأحرف).لذلك ، يجب عليك تحديد نوع التمثيل الصامت على أنه الكل حالة أقل لتحقيق مباراة.

إلى جانب أن هذه بعض الاقتراحات الأخرى:

  1. أسماء حزمة الروبوت (وفي أسماء حزمة جافا بشكل عام) يجب استخدام الأحرف الصغيرة فقط.يجب أن تبدأ أسماء الفئات (بما في ذلك الأنشطة) بحرف كبير.

  2. بدلا من إنشاء أنواع التمثيل الصامت المخصصة للتطبيق الخاص بك ، يجب أن تفضل أنواع منتدى نفك الخارجية:

    NdefMessage msg = new NdefMessage(new NdefRecord[] {
        NdefRecord.createExternal(
            "jhadwin.com",          // your domain name
            "passthebomb.newgame",  // your type name
            message.getBytes()),    // payload
            NdefRecord.createApplicationRecord("com.jhadwin.passthebomb")
    });
    

    في هذه الحالة ، يمكنك استخدام مرشح نية مثل هذا:

    <activity android:name="com.jhadwin.passthebomb.NewGame">
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="vnd.android.nfc" android:host="ext"
                  android:pathPrefix="/jhadwin.com:passthebomb.newgame" />
        </intent-filter>
    </activity>
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top