Hi, I have been doing little bit research about this issue. I just under investigation one simple function QBluetoothLocaldevice::name().<br>The function crashes if vm->GetEnv() is done in JINI_OnLoad() . When I moved that code inside of QBluetoothLocaldevice constructor<br>
code works. I have not yet made any patches, this was just result of simple experiment. <br><br>I tried in some other code do same allocations in JINI_OnLoad and got errors that VM was allocated for wrong thread.<br>It looks that JINI_OnLoad is too early phase to allocate<br>
<br>Before going forward with fix, I just like hear opinion am I at right track. The bthost is my experimental class<br>just to test code. initJini is called from constructor. Name() duplicates function from QBluetoothLocalDevice<br>
<br>Then other related question, if I do patched libQtConnectivity, what is best way to use it ? Necessitas always <br>installs it's own and it can't be copied over without rooting the device.<br><br><br>Kate<br><br>
void BtHost::initJini()<br>{<br> void* venv = NULL;<br><br> qDebug() << "BtHost:JNI_OnLoad()";<br> if (m_jvm->GetEnv(&venv, JNI_VERSION_1_4) != JNI_OK)<br> {<br> qDebug() << "Qt:GetEnv failed";<br>
return;<br> }<br> jclass qtApplicationC;<br> env = reinterpret_cast<JNIEnv*>(venv);<br> btAdapterClass = env->FindClass("android/bluetooth/BluetoothAdapter");<br> if (btAdapterClass == NULL)<br>
{<br> qDebug() << "Qt:Native registration unable to find class android/bluetooth/BluetoothAdapter";<br> }<br><br> jmethodID getDefaultAdapterID =env->GetStaticMethodID(btAdapterClass, "getDefaultAdapter", "()Landroid/bluetooth/BluetoothAdapter;");<br>
if(getDefaultAdapterID == NULL){<br> qDebug() << "Qt:Native registration unable to get method ID: getDefaultAdapter of android/bluetooth/BluetoothAdapter";<br> }<br><br> btAdapterObject = env->CallStaticObjectMethod(btAdapterClass, getDefaultAdapterID);<br>
if(btAdapterObject == NULL){<br> qDebug() << "Qt:Device does not support Bluetooth";<br> }<br> btAdapterObject = env->NewGlobalRef(btAdapterObject);<br>}<br><br>QString BtHost::name() const<br>
{<br> qDebug() << " BtHost::name()";<br> static jmethodID getNameID = env->GetMethodID(btAdapterClass, "getName", "()Ljava/lang/String;");<br> qDebug() << " QBluetoothLocalDevice::name() env->GetMethodID";<br>
jstring peerName = (jstring) env->CallObjectMethod(btAdapterObject, getNameID);<br> qDebug() << " QBluetoothLocalDevice::name() env->CallObjectMethod";<br> jboolean isCopy;<br>
const jchar* name = env->GetStringChars(peerName, &isCopy);<br> QString qtName = QString::fromUtf16(name, env->GetStringLength(peerName));<br> qDebug() << " QBluetoothLocalDevice::name() name=" << qtName;<br>
env->ReleaseStringChars(peerName, name);<br> qDebug() <<" QBluetoothLocalDevice::name() exit";<br> return qtName;<br><br><br>}<br><br><br><div class="gmail_extra"><br><br><div class="gmail_quote">
On Thu, Nov 1, 2012 at 7:29 PM, Kate Alhola <span dir="ltr"><<a href="mailto:kate.alhola@gmail.com" target="_blank">kate.alhola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="im">On Mon, Oct 29, 2012 at 10:59 PM, Micke Prag <span dir="ltr"><<a href="mailto:micke.prag@telldus.se" target="_blank">micke.prag@telldus.se</a>></span> wrote:<br></div><div class="gmail_extra"><div class="gmail_quote">
<div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<div>Hi,</div><div><br></div><div>It only happens after I call start(). Only creating the object works fine.</div><div>Thank you for looking into this.</div></div></blockquote></div><div><br>I noticed that exactly same thing happens with QBluetoothSocket and QBluetoothLocalDevice, in both cases they happen If I try use some member functions. Creation of object goes OK in both of cases. I posted report to android-qt list but may be this is better forum.<br>
<br>Here is two cases where I got same bug<br><br>Code:<br> qDebug() << "Turning bluetooth on";<br> localDevice->powerOn();<br><br>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(60,60,60)">D/Qt ( 4746): Turning bluetooth on </span></p>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(190,20,20)">E/dalvikvm( 4746): JNI ERROR (app bug): accessed stale local reference 0x9f50001d (index 7 in a table of size 4)</span></p>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(190,20,20)">E/dalvikvm( 4746): VM aborting</span></p><br>Or<br><br>from:<br> wmSocket = new QBluetoothSocket(<div>
QBluetoothSocket::RfcommSocket);<br>
<br> qDebug() << "btHost::tryConnect()" << wmPulse.address().toString() << ":" << PORT;<br> wmSocket->connectToService(wmPulse.address(), PORT);<br><br>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(60,60,60)">D/Qt ( 6195): btHost::tryConnect() "83:7C:82:00:39:31" : 5 </span></p>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(190,20,20)">E/dalvikvm( 6195): JNI ERROR (app bug): accessed stale local reference 0xb3b0001d (index 7 in a table of size 0)</span></p>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(190,20,20)">E/dalvikvm( 6195): VM aborting</span></p><span class=""><font color="#888888"><p style="margin:0px;text-indent:0px">
<br><span style="font-family:'Monospace';font-size:9pt;color:rgb(190,20,20)"></span></p>
<p style="margin:0px;text-indent:0px"><span style="font-family:'Monospace';font-size:9pt;color:rgb(190,20,20)">Kate<br></span></p></font></span></div><br> </div><div><div class="h5"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><div><br></div><div>Regards</div><span><font color="#888888"><div>Micke</div></font></span></div><div><div>
<p style="color:rgb(160,160,168)">On Monday 29 October 2012 at 21:54, Lauri Laanmets wrote:</p>
<blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px">
<span><div><div>
<div>Hi<br>
<br>
I guess that is addressed to me :). Crash is definitely a bug,
regardless of Android permissions or missing Java files. Can you
verify if it crashes on creating the DiscoveryAgent object or when
starting the discovery?<br>
<br>
I have lost my old devel set-up, It takes me a few days to get on
that issue.<br>
<br>
Regards<br>
Lauri<br>
<br>
<br>
On 29.10.2012 22:31, Micke Prag wrote:<br>
</div><blockquote type="cite"><div>
<div> Hello, </div>
<div><br>
</div>
<div>I know that the Bluetooth support in Necessitas is not
complete but I wanted to try it out anyway. I am only trying to
discover bluetooth devices but my application crashes. I don't
know if I am doing something wrong or if it is not supported
yet?</div>
<div><br>
</div>
<div>The output from logcat can be found here: <a href="http://pastebin.com/khcj28Xy" target="_blank">http://pastebin.com/khcj28Xy</a></div>
<div>This is what I am doing:</div>
<div>QtMobility::QBluetoothDeviceDiscoveryAgent agent;</div>
<div>agent.start();</div>
<div><br>
</div>
<div>libs.xml:</div>
<div>
<div><?xml version='1.0' encoding='utf-8'?></div>
<div> <resources></div>
<div> <array name="qt_libs"></div>
<div> <item>QtCore</item></div>
<div> <item>QtGui</item></div>
<div> <item>QtNetwork</item></div>
<div> <item>QtDeclarative</item></div>
<div> <item>QtXml</item></div>
<div> <item>QtOpenGL</item></div>
<div> <item>QtSystemInfo</item></div>
<div> <item>QtConnectivity</item></div>
<div> </array></div>
<div> <array name="bundled_libs"/></div>
<div></resources></div>
<div><br>
</div>
<div>I also have this in AndroidManifest.xml:</div>
<div><uses-permission
android:name="android.permission.BLUETOOTH" /></div>
<div><br>
</div>
<div>Bluetooth is activated on the device.</div>
<div><br>
</div>
<div>The device is a Cube U30GT-H running Android 4.1.1</div>
</div>
<div>
<div><br>
</div>
<div>-- </div>
<div>Micke Prag</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
Necessitas-devel mailing list
<a href="mailto:Necessitas-devel@kde.org" target="_blank">Necessitas-devel@kde.org</a>
<a href="https://mail.kde.org/mailman/listinfo/necessitas-devel" target="_blank">https://mail.kde.org/mailman/listinfo/necessitas-devel</a>
</pre>
</div></blockquote><br>
</div></div></span>
</blockquote>
<div>
<br>
</div>
</div></div><br>_______________________________________________<br>
Necessitas-devel mailing list<br>
<a href="mailto:Necessitas-devel@kde.org" target="_blank">Necessitas-devel@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/necessitas-devel" target="_blank">https://mail.kde.org/mailman/listinfo/necessitas-devel</a><br>
<br></blockquote></div></div></div><br></div>
</blockquote></div><br></div>