Skip to content

It doesn't work about "android.activity.bind(on_new_intent=myFunc)",need help,thanks #1317

@linuxrootok

Description

@linuxrootok

Python code:
`import kivy
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout
from kivy.properties import NumericProperty
from kivy.app import App
from kivy.core.window import Window
from android import activity
from kivy.logger import Logger
from jnius import autoclass,cast
NfcAdapter = autoclass('android.nfc.NfcAdapter')
PythonActivity = autoclass('org.kivy.android.PythonActivity')
PendingIntent = autoclass('android.app.PendingIntent')
Intent = autoclass('android.content.Intent')

import android

from kivy.clock import Clock
from kivy.utils import platform
import threading
#from nfc_manager import NFCBase
from android.runnable import run_on_ui_thread

#kivy.resources.resource_find('./res')
from kivy.resources import resource_add_path,resource_find

resource_add_path(os.path.abspath('./res'))

BUILDVERSION = autoclass('android.os.Build$VERSION').SDK_INT
NfcAdapter = autoclass('android.nfc.NfcAdapter')

JString = autoclass('java.lang.String')
Charset = autoclass('java.nio.charset.Charset')
locale = autoclass('java.util.Locale')

IntentFilter = autoclass('android.content.IntentFilter')

Ndef = autoclass('android.nfc.tech.Ndef')
NdefRecord = autoclass('android.nfc.NdefRecord')
NdefMessage = autoclass('android.nfc.NdefMessage')

app = None

Builder.load_string('''
:
cols: 1
Label:
id: 'L1'
text: 'Welcome to the Hello world'
Button:
text: 'Click me! %d' % root.counter
on_release: root.my_callback()
''')

class HelloWorldScreen(GridLayout):
counter = NumericProperty(0)
def my_callback(self):
print 'The button has been pushed'
self.counter += 1

class HelloWorldApp(App):

def build(self):
    Window.bind(on_keyboard=self._hook_kb)
    #self.nfc_init()
    return HelloWorldScreen()

def _hook_kb(self,window,key,*args):

    if key == 27:
        return True
    else:
        return False

def on_start(self):
    self.nfc_init()
    pass

def nfc_init(self):
    activity.bind(on_new_intent=self.on_new_intent)
    self.j_context = context = PythonActivity.mActivity
    self.nfc_adapter = NfcAdapter.getDefaultAdapter(context)
    if True == self.nfc_adapter.isEnabled():
        Logger.info('YY')
    else:

        Logger.info('NN')

    self.nfc_pending_intent = PendingIntent.getActivity(context, 0, Intent(context, context.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0)

    Logger.info('nfc init --Tyler')
    #return True 

def on_new_intent(self, intent):
    #print 'on_new_intent()', intent.getAction()
    # get TAG details
    Logger.info('nfc action start --Tyler')
    tag = cast('android.nfc.Tag', intent.getParcelableExtra(NfcAdapter.EXTRA_TAG))
    #details = self.get_ndef_details(tag)

def on_pause(self):
    #print 'paused'
    #self.nfc_adapter.disableForegroundDispatch(PythonActivity.mActivity)
    return True

def on_resume(self):
    Logger.info('App restart --Tyler')
    self.nfc_init()
    #self.nfc_adapter.enableForegroundDispatch(PythonActivity.mActivity, self.nfc_pending_intent, None, None)

if name == 'main':
MyApp = HelloWorldApp()
#activity.bind(on_new_intent=MyApp.on_new_intent)
MyApp.run()
`

and p4a file:
--requirements pyjnius,python2,kivy,sdl2_mixer,android --package org.nfctest.test --name nfctest --arch armeabi-v7a --whitelist intent-filter.xml --version 0.3 --private . --bootstrap sdl2 --copy-libs --window --debug --activity-launch-mode singleTask --intent-filters /opt/projects/nfctest/intent-filter.xml --permission INTERNET --permission NFC --permission VIBRATE --permission ACCESS_WIFI_STATE --permission CHANGE_WIFI_STATE --permission CHANGE_NETWORK_STATE


Why I can't get the log "nfc action start --Tyler"

step by step, I write it like this,via this link 'kivy+NFC'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions