2017년 3월 26일 일요일

Scroll the scrollable arrangements (to bottom/top) using a block


Is there a way to scroll the the scrollable arrangements using blocks?  If a scrollable vertical arrangement contains a label that fills its parent, as new lines of text are added to the label, they can be off-screen and it would be nice to scroll to the bottom automatically.

Thanks if you know of a way...

--
If all you want to scroll is the text in the label,
you can use the trick in this Gallery sample:

The label seems to scroll under the control of the dragged ball in
the thin canvas at its right, but behind the scenes the label.Text 
is having its front removed using a segment() block.

Estimate how many bytes can be displayed in your label, and use that number
for your initial drag simulation setting.






-- 
Here is a very crude example of using a label (lbPump) to move a set of labels up and down inside a normal vertical arrangement. You would need to adjust the lbPump and label values to suit your requirements


-- 

set max value of slider


I need to set Mid and max value of slider which depends on Ibresult text for making mp3 sound because I have many files of mp3 and each file has different duration some of them has one hour and other has half an hour. My question is how can I set the max value of slider and update each time?


--
From you blocks and description I do not have enough information to help you. Please prepare a small example and post the .aia

--
I attached the file. I tried so many times to set max value but unfortunately I could not do it. Also the thumbPosition can not move.


--
There is a problem with handling the slider in the way you try to do it. Each time you set the thumb position, also the thumb position changed event will be fired and because of that the player restarts every time the timer fires, because you try to set the tumb to the current position. This chokes the app very quicly. It ran out of memory or I had to restart my phone.
The only way this can be solved is by having two sliders, one showing the progress (without thumb), the other allowing a drag of the thuimb and then restart at that place.
I will post the corrected example tomorrow, I need improve some small things first.

--
I tried hard to improve the app, but still I can not set Min and max value of slider and also make the slider move every time the timer move. Please see the attached aia.


-- 
You do not have to shout at me. I told you to wait!!
I cannot even load your app, so I cannot look at it.

Here is an app that almost works.
- You can select a chapter and it will start playing.
- it will show a yellow progress bar.
- You can move the thumb of the second slider and the player will move to that position
- You can stop.
- sometimes you can pause

There are problems with the play button, I will look at this later today.

--
Here is a better version.
I think that there is a problem in TaifunPlayer, which means that isPlaying is not set to true when playing is resumed after pause. I will try to find out.

This version should work however. If you have question, please ask (in the forum!!)

--
I really appreciate of your great help and supporting.
Every things is ok, but I have noticed that when I press pause button then play button, I can move the slider but the time can not be changed. 

--
This is an App Inventor issue. I have some tips for a workaround, but no time today. Be patient. 

--
The problem with Pause cannot be solved right now. It is an AI2 problem. I suggest you take it out.
The tips i recieved to use one slider instead of two, unfortunately do not work either. I am still in discussion about this.
So for now, be happy with what you have got, it is the best I can do.

--
Thank you so much Ghica for all of your efforts to solve all problems I had faced. Without your help after God,I Would not succed to publish my app.

--

Convert days into years , months and days.


Is there any way to convert the difference between two dates into years, months and days?

--
This is tricky.

It can't be simply done by counting days, because the number of days in a month varies by month and by year.

Maybe the problem can be broken down into simpler problems by establishing
landmarks at the beginning and end of years and months, and using those to 
get years and then months and then days.

But this would involve a pretty bushy if/then/else tree comparing the order of date parts
versus each other.

--
Yes. It can be done using couple of blocks. See my post here: https://amerkashi.wordpress.com/2017/03/11/dateutils-extension/

--
Thank you, Mr.Abraham Getzler.

Thank you,  Mr. Hossein A
--
It can be done in blocks using decreasing overshoots and the help of clock blocks.

See attached.

This might still be controversial, depending on your test date ranges.








-- 
Thank you, Mr.Abraham Getzler.
It took some time to completely comprehend the blocks. A youtube video of the process of creating various procedures would have been a spellbound effect on the audience. That would be asking too much of your time. 
The solution is amazing.

--
I regret that my speaking voice is too soft and my accent too strong for decent You Tube video production.
I prefer to document in text form, which is also more amenable to Google Translate.

The problem you posed has to be regarded as a trick question,
a logical impossibility usually used to incapacitate murderous robots,
(I like you better because you are identical to your twin - Star Trek), fluster 
courtroom defendants ("When did you stop beating your wife?"), 
or annoy mathematicians ("What's the highest positive integer?").

For example, what is one month after January 31?
Is it February 31?
Or is it the last day of February, either the 28th or 29th?
Or is it some constant number of days after January 31, say 30 days?

I dodged that tough question in my blocks by using the AI2 .AddMonth block
to do the dirty work, to absolve myself of blame when things go wrong.

This is a good student example, because it can stimulate debate
and sharpen thinking.

--
I forgot to include this reference in my prior post regarding the definition of a month ...

So the proper answer to your post also depends on the application
and the legal jurisdiction.

--
Mr.Abraham Getzler,
The App is just running fine, even if I disable the two blocks Viz. DatePicker.AfterDateSet. What is the purpose of these blocks?


--
The App is just running fine, even if I disable the two blocks Viz. DatePicker.AfterDateSet. What is the purpose of these blocks?
I assumed it was necessary to explicitly set the text in the Date Picker to match the date that was chosen.

I have not tested that assumption.

Maybe I was wrong?

--
Mr.Abraham Getzler,
I am an amateur. You are a professional. I am just curious to know the reason for those blocks.
Thank you.

--
I just ran a test on the emulator with those blocks disabled.

If you closely examine the emulator, you will see it saying
that there is 1 year between 3/24/2017 and 3/24/2017.

So the Date Picker does not update its .Text value automatically,
and my blocks were necessary.

The Date Picker .Text values are an important part of the GUI
for this app, in that they provide transparency and make it easier to
verify the correct operation of the app at a glance.

Having both the input and output values of a calculation
simultaneously available on the screen increase the
trustworthiness of an app.

Thanks for the interesting post!


-- 
I ran it on AI Companion with my phone. It is just working fine.
Thank you, for your interest.

--

Count-up Timer


Is there an example for count-up Timer instead of countdown Timer.  








--
As Taifun said in your previous question, a count up Timer is almost identical to a count down timer.  Instead of counting down from a positive number and subtracting one each second you start counting from 0 and add one.

You should take your existing code for countdown and make a few small changes.

 Isn't it time that you read the Inventor's Guide here http://www.appinventor.org/book2  and reproduce the example code  and start doing some tutorials?  Learning to program is a matter of doing a little reading then experimenting, changing things and seeing what happens.   If you save a copy of your Project with a different name or save an aia of the working code you can not break anything.  

Something like the code below should work.   It is simpler than the code shown at puravidaapps, all it does is count UP.    You need a Button, a Label and a Clock with the interval set to 1000 ms (1 second).

With a small modification, the example code can also count down.    There is no alarm, no code to prevent the app from going to sleep, just the basics.

--
I need an count-up timer which be able to use a slider and a player with it and make that timer start from any position. 

--
If a count up timer means that I want to know what the date and time is after so many milliseconds from now, then this is not an easy question. Like, tonight at 02:00 a.m. summer time will start here, so 7 hours from now, (21:35) is not 04:35 but 05:35 a.m.
See also this thread: https://groups.google.com/forum/#!msg/mitappinventortest/Z6ATYVSFaEA/0REDZ-5nHAAJ

--
Is it possible to make it only for HH:MM:SS?
Please check the blocks


--
Probably yes.
But what is the purpose of this calculation? What do you want to do with it?
Did you test your blocks? What was the result? If it was what you expect, fine. If not, what was wrong?

I am not here as a teacher, checking assignments. My goal is to help people to find answers themselves, which is much more gratifying for both of us.

--
It works but it gives result very slowly. I made it just for getting more experience. 


I need an count-up timer which be able to use a slider and a player of Mp3 with it and make that timer start from any position.

--
There is no problem with that way. But I want to make it with reverse way.

--
You Did not answer my questions, therefore I am not able to answer yours.

--
Actually, I need to make it count-up instead of count-down because I want to start clock with Mp3 sound and all of people want to know in which time they are for example they want to 2 minutes back to listen again what is said.

--
Here is a useful extension to your purpose. 
https://puravidaapps.com/player.php

You may want to use "CurrentPosition", "Duration" and "StartAtPosition".

--
This way is not the thing I want.  I want to know how to build count - up clock.

--

Have you tried this? It is doing exactly what you have asked.
--
No, I didn't try it. Can you please send the aia. please if it is allowed.

--
@zac It is really admirable that you come up with code examples as answers to problems, but the problem with software development is not only how to code something but also what. And that is not clear at all in this case. Therefore you do not know which problem your code is solving, certainly not if it is solving osama's problem.
@osama
My definitition of count down is that you want to calculate the time between now and some time in the future, for example how much time is left befor the new year starts. Apparently that is not what you want.
A definition of count-up could be that you want to know what the date-hour-minutes-seconds is after a fixed duration from now. This is a difficult problem to solve in general, but App Inventor has easy blocks to do that: call Clock1 Add duration, for example. But I am pretty sure that this is not what you want either.

What it is -maybe- that you want, is when someone is listening to an .mp3, that he/she can see how much time has passed since he/she started playing the .mp3.
If yes, then you can calculate this the same way as a count-up, you just use the call Clock1.Duration (start, end) block.So, please show a design of what you want. Try some blocks also to solve your problem and then describe exactly what happens differently from what you think it should be. If tyou do not do that, we will keep shooting in the dark, while you will never be able to learn something and solve your own problems.

--
Yes what I want exactly, is when someone is listening to an .mp3, that he/she can see how much time has passed since he/she started playing the .mp3. But how can I do that. IT IS REALLY DEFFICULT FOR ME TO DO THAT:)

--
Post a simple aia, then I can add this number (or maybe Zac). Have patience, it is national holiday here tomorrow and it is too late now.
--
@Ghica Thank you for the feedback. I put the example from what I understood form @osama. 

@osama I'm not good at explain in words so look at my attachments and see if that similar to what you want. If so, let me know and I'll try to explain the logic of my blocks.




--
Thank you so much Ghica and Zac. This is exactly what I am looking for. Also I had have two slides. But now, One slide is more enough.
You are a very professional Programmer in Android application. Now, I need  only to add an hour. Is it possible? Because the sound is more than two hours.

--
Unfortunately this does not work right. You really need two sliders and also you should not use Pause, because of a bug in app inventor.
Read again your other thread: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mitappinventortest/9UQ2QLO2c9E/G26eF2oYGQAJ

--
@Ghica: the pause issue in the Player extension has been fixed meanwhile, see also https://puravidaapps.com/player.php

--
Yes you are right Ghica I have problem after I click pause I can't move the slide but before yes. However, it doesn't matter  because after click pause and then play it continue from the same position. The main problem Now is, I need  only to add an hour. Is it possible? Because the sound Mp3 has  more than two hours. Please help me.

--
@Taifun: Thanks! good to know!

@Osama: To fix the pause bug, download the Player extension again. Load it using a new name. Then, change all the references to the old Player extions to the new Player extension. Finally remove the old player extension.
To add the hour: change the pattern to "hh:mm:ss" (it occurs twice).
--
@Ghica: to upgrade an extension, simply import the new version and it will upgrade automatically... it's that simple...

--
@Taifun Oh! I did not know that. I thought that it was still the show stopper for releasing new extensions from MIT itself. Thanks!

--
I have already added hh:mm:ss but it seems that show 3;00;00 when start playing and after completing one hour it change to 4:00:00 it means that add one hour to the three.

--
You must have done something else wrong. 

--
Please see attached.


--
The problem must be in the part you are not showing. If your time starts with 3:00:00, then the initial calculation must be wrong.

--
I am sorry Ghica.
What can I do to fix the problem.

--
Post an .aia

--
Please see attached aia.
Thank you so much Ghica for your usual kindness and help.
I have tested the extension and it works brightly.
Thank you a lot Taifun and Ghica


--


The problem with the hours is this: the duration is formatted as a date-time starting at Januari 1st 1970, taking into account the timezone you are in.
This means, if you are looking at minutes and seconds only, you will not see it, but in my timezone duration 0 is formatted as 01:00:00 and in yours 03:00:00
It is not easily solved by adjusting the timezone, therefore I made a procedure for you to solve it. Look at the blocks attached. For your convenience there is also an .aia
(I did not have the patience to wait for an hour, but I am pretty sure it works).

--
Actually, I am sorry to tell you that I have tested the aia you had sent it many times waiting hour to come but it hasn't come at all.

--
It seems I left some test values in. Now a made a proper calculation, not using the clock. Getting tired I suppose.

--
Now I can sleep in a very deep after you have solve my problem.
Good luck Ghica!
Thank you so much for all you have done to let my app succeed.

--
You may want to add a leading zero sometimes, to make sure you always see 2 digits for the hours, mins, secs, like 01:08:05 etc.  You should be able to find a procedure for it in the forum, otherwise I will add it tonight.

--
Next time I do not reply when you write to me privately.
You wrote:

I want to add the fixed total amount hours, mins, secs like 01:08:05 at the end of slider.

I added it to the .aia attached. I think you could have done it yourself easily.
I also added a procedure to make sure you always have two digits for values, adding a leading zero if needed.

--
I am so sorry to send you in private.
Sure, I didn't tend to send it in private. In fact, by mistake I have opened my email instead of opening forum page:)
I am so happy to help me.
I have tested it and it is ok now.

--

Problem: DataTyp Convert with BLE


I have a problem and i don´t know how to solve it on my own.
I want to read out the given temperature by the service: Health Thermometer and the characteristic:Termperatur Measurement (00001809-0000-1000-8000-00805f9b34fb and 00002a1c-0000-1000-8000-00805f9b34fb). I allready made an application with the help of android studios to do the same thing and it works. But i´m not able to do the same with the App Inventor.
The device, which i try to comunicate with, sends the data (in the named service) in hexadecimal notation. for example: 00 A5 00 00 FF, the actual temperatur value is hidden in the A5 which means 165 in decimal notification so its 16.5 °C. The onboard display shows the same temperatur.
Now the question or the problem i have: how can i make my app (now build with app inventor) show me the full hexadecimal notation. if i try the readintValue block with an offset of 0 the app will give me value of 0 which is wrong.
if i set the offset as 1 it gives me the allready converted version of the value (in this case it will show me 165 but i want to see the full 00 A5 00 00 FF). So important for me now is not to get the converted temparatur. i want to have the whole number.

Hope you can help me.    

--
I think you get same question  like me ....to read the bike speed sensor ..... BLE ext ...still have bug ....

--
I think I have the same issue. Or similar. 
Int is seen as 8 bits and you can only look at one at a time by changing the offset. The block IntValueChanged will only get one byte of data and displaying it on Label will be converted to decimal. 

If you want the whole message it seems that only stringValueChanged will read the whole characteristic field in one go. 

The characteristic I'm trying to read is made of:
Timestamp LSB, Timestamp MSB, X axis LSB, X axis MSB, Y axis LSB, Y axis MSB, Z axis LSB, Z axis MSB, (From the WeSu made by ST)

The problem that I'm facing then is to split the string between the different variables that it holds, reconstruct the int16 and then display them.

By using the block "stringValueChanged" I can then use the block "segment text" and then potentially reconstruct the different segments in their correct order.
Unfortunately, I can't find a way to "convert" the newly created text segment to it's hex/decimal value. I only end up with a meaning less character that can't be displayed properly. 

--
Yes, the BLE extension is still experimental and needs improvement. The developers are well aware of it.

for now, your best option is to work with strings, as Alex decided to do.
I do not know exactly what the values are like you are receiving but I think the convert number block should be able to help:
http://appinventor.mit.edu/explore/ai2/support/blocks/math.html#convertnumber

There is also the hexify procedure that Abraham made: https://groups.google.com/forum/#!searchin/mitappinventortest/hexify%7Csort:relevance/mitappinventortest/404FUnScIyY/UoDm3yWpCwAJ
But maybe you do not need that.

Try it out, and report what you find.

--
Thanks for your help!

I tried the convert number but I'm getting Runtime errors... I tried the 4 options just to be sure. 

If I use IntValueChanged with an offset of 3 I read a number going from 0 to 255.
Byte 3 and 4 make an int16 (signed) representing the X axis of the accelerometer.  Value goes from -2048 to +2048. 

I'll have a look at Abraham's procedure. 

--
The runtime error says it is not a binary number. So, what is it? Something else as text with only 1s and 0s in it. Check with DoIt!

--
I tried the DoIt and get the same as what I get displayed on the phone's screen. 

The result shows L and unknown character. If I move the accelerometer, the data will change, and sometimes it will show two unknown characters.

So now if I hard code for example and M, the result would be ML of course. But I want to see 0x4D4C or its decimal equivalent. I tried the convert number block and get a runtime error. 

The block StringValueChanged  will convert all bytes present on the characteristic to a series of Strings (their equivalent Characters) if the byte is above 0x7F, it will show the unknown character symbol.

Now, if reading a whole characteristic (more than 1 byte) requires the use of StringValueChanged block (instead of multiple instances of InValueChanged with different offsets), then I need to find a way to convert each byte (string) to its decimal/hex value. 

Thanks for your help! 

--
I have a problem with this. It seems to me that what you get is already binary, therefore you may like to convert it from binary to decimal, or hex. And maybe not all 4 bytes at the same time, but maybe each byte separately. Did you try that?
--

Yes I tried and I'm getting runtime error.

In order to simplify the problem,I'm now playing with the Micro:bit device. Using the same app, I connect to the UUID of the Button service and the characteristic of Button A (BLE map Micro:bit). If I use the block InValueChanged (offset 0) I can see a value going between 0 (not pressed), 1 (pressed) 2 (long press). 
It is all good and would be sufficient for this particular application since the data is held in a single Byte. 

If I use StringValueChanged instead (which would get all the bytes from this charasteristic, in this instance there is only one) there is nothing showing because 0, 1 and 2 do not represent any characters. 
If for example the Micro:Bit was sending 0x54 instead of 0x01 when button A is pressed, I would see displayed. 

Writing code in C would make this issue so trivial. But it seems that MIT App Inventor 2 is trying so hard to handle Strings and Decimal in the background that I'm left with this simple issue. 

The convert number keeps on throwing runtime errors.

Bottom line: if a byte is equal to 0x01 and you receive it using StringValueChanged how can you display 1 ?

--
 if a byte is equal to 0x01 and you receive it using StringValueChanged how can you display 1 ?
See Italo's solution at

(from the Math section of my FAQ
)

-- 
Thanks a lot for the solution! I'll play around with those blocks and see if I can get a proper representation of the accelerometer axis.

--

Question about BLE extension reading a value


Hi there, i have a BLE device and i succesfully connect it with my app. When i push a button, the device send a hex value of two bytes (0xFF01). When i try to read the value from my app using the ReadIntValue with intOffset 0 and 1 i get the correct values 255 and 1 but when i try to read the value with the ReadStringValue and offset 0 i get a strange symbol. I attach 3 images showing the values in the top right corner.

I really appreciate any help you can provide.

17309756_10212688021345476_2534620112472956605_n.jpg 표시 중

17425921_10212688020985467_2154400209926039965_n.jpg 표시 중

17458042_10212688021025468_3930352313014002086_n.jpg 표시 중

--
Please take a look at the bottom of this thread: Problem: DataTyp Convert with BLE


--
Hello Ghica, thanks for your response. I already seen this solution but i can't find this character in the table.

-- 
I print the value that the BLE extension reads into a textbox then i copy and paste it into a comparison box and it works but i don't understand why it reads the value with this way.


block.PNG 표시 중


-- 
Do you know what your BLE device is sending? And in what format?

-- 
Interpreting what you read in the BLE extension can be difficult and (forgive me @Ghica) sometimes impossible.

The normal, printable ASCII character set runs from 32 (space) to 126 (~). From 128 to 254 are a range of special printable characters see here:

As you can see ASCII value 255 (Hex FF) is defined as a "non-breaking space". I don't know what that means!!!!! But AppInventor is printing the strange symbol you have shown in your previous posts. It's an unfortunate coincidence that you are sending Hex FF

However, if you can read the input correctly as an Integer, why not continue to do that?

If you are in control of what your device sends to AppInventor, then you can send what you like: If you want to read and interpret a string, then send a readable string!

How about "On" and "Off" ?

Hope this helps

-- 
I analyse with wireshark the bluettoth packets that the device send and recieve. And as i can see it is in hexadecimal format.



value.PNG 표시 중


-- 
Unfortunately Neil i can't change the value that my device sends. In this specific situation i can do my job reading only one byte but maybe another time i will need all the information.

--
So the device output is fixed; OK.

I may be wrong about this, but I doubt that your device sends in Hex - it almost certainly sends in Binary. Hex is merely a convenient way for Wireshark, nRF Connect and other systems to display a binary value, since each Hex character represents 4 bits.

On the question of Wireshark, did you implement on an android device? If not, how did you capture the BLE packet.

-- 
Yes the device is fixed. It's an activity tracker (smart watch). From a rooted android device i capture the packets and analyze the log file with wireshark. The activity tracker has an option that i can take remote pictures from the camera. I found the value that i must send from the app to enable this option and when i push the button from the tracker i open and close my BeeWi bulb which is also connected to my app. It works fine if I use the character that i posted later. So do you think that if i convert it to binary it'll work also?

--
You don't need to change it to binary - one of your images shows it seeing the value 255 so why can't you use that?

-- 
This is only the half of the information. Another device might send a value of 5-6 bytes. I need to read all the information at once.

-- 
It is possible, using repeated Integer reads at offset 0, 1,2,3,4,5 etc, I have done it, but it is very complex and also VERY VERY slow.

I think you will have to be patient - the BLE extension is still experimental and is known to have a number of shortcomings.

I understand that a new version is expected in a couple of months and, hopefully, should make it much easier to do what you want to do.

-- 
Thank you Neil. I also read about the new version of the extension. I will wait to see the new features...!!!

-- 

As far as the micro:bit is concerned, I am wondering how you can get useful values by repeatedly reading ints. The next time you get the value, it has changed, so you cannot really combine them.
I tried to read accelerometer values as a string, but from there my attempts fail. The profile says:

Accelerometer Data : Contains accelerometer measurements for X, Y and Z axes as 3 unsigned 16 bit values in that order and in little endian format. Data can be read on demand or notified periodically. Values are in the range +/-1000 and in milli-newtons.

I used Italo's asc function to get values out, byte by byte, but I found that bytes 2 and 3 are always 0 and the others have values between 0 and 128, roughly.
B.t.w. I wonder how unsigned numbers can be negative?

-- 
Ghica - my solution  serves to illustrate a number of things:
1. The mismatch in the BLE readInteger means you see 6 separate 8 bit integers, instead of 3 separate 16 bit integers
2. You have to know they are supposed to be 16 bit, signed AND little endian to make sense - In fact, you have to know the answer in advance to set up the algorithms to get the correct answer - see below.
3. I can, with extreme difficulty correctly read the values from a STATIC micro:bit, where the values are NOT changing
4. I can convert the values into X,Y and Z coordinates which are CORRECT.
5. As a method of reading changing Accelerometer coordinates, my solution has NO practical value!! Hopefully, the eagerly awaited new version of BLE will solve the problem.......

This is what I did:
1. Lock the mocro:bit down on my desk.
2. Use the micro:bit Blue App to read the accelerometer data and to set the refresh period to 640 mS - maximum.
3. Wait for the values to stabilise and write them down
4. Disconnect from micro:bit Blue and connect AI Companion to develop and run my very tortuous App
5. I can calculate the same coordinates as I read in micro:bit Blue App

There is a misprint in the micro:bit Bluetooth profile at:


In the Accelerometer Service it says "Value contains fields which represent 3 separate accelerometer measurements for X, Y and Z axes as 3 unsigned 16 bit values in that order and in little endian format." --- WRONG

and in the Accelerometer Characteristic it says "Contains accelerometer measurements for X, Y and Z axes as 3 signed 16 bit values in that order and in little endian format. X, Y and Z values should be divided by 1000 "

And, indeed, depending on how you position the micro:bit, you do get 2s complement negative values, especially on the Z Axis - micro:bit Blue proves this!

I have tried to use the string method, with the weird characters for ASCII values below 32 in another situation, but I couldn't get it to work at all. I ended up using my own method, again based on repeated readInteger.

-- 
I will speak openly.

Don't waste your time with App Inventor,  it is VERY BAD for ble. If you want to wait for new version App Inventor, it can take few years ;-)

I wasted 8 weeks with App Inventor for to READ and NOTIFY ble app.

App Inventor works for only WRITE function,  it doesn't READ and NOTIFY.

 As i said before, don't waste your time with App Inventor ble, learn Android Studio. Search "BluetoothLeGatt" in internet.
I found a code, after the few weeks, i learned to add some code in it.  My app is working now for READ and NOTIFY now (Android Studio)

-- 
This is not true. If your BLE device has notification turned on for a certain characteristic, the values for this characteristic will be received by App Inventor just fine in the ChangedStringValue or ChangedIntValue event blocks. I agree that there are many restrictions currently, but I hope and expect that there will be a much improved extension or maybe even a component anytime soon.

-- 
I would add to what @Ghica said: using AppInventor and using Android Studio are worlds apart..........a very big learning curve in Android Studio!!

-- 
%90 Bloutooth Low Energy MODULES are Notification turned OFF in the market. %10 is Arduino 101 and others.

So, can you give me an idea about READ without NOTIFY first?

Do you have a Notify ON example for BLE with App Inventor?

We can play with Arduino 101 and App Inventor Ble together, but you can't use Arduino 101 in serious BLE project.

For me, AI2  BLE works for write only, if you have ONLY ONE NOTIFY SAMPLE in your hand, i will say "YOU ARE RIGHT"

-- 
To me, being right is very unimportant. What matters to me, is to be able to tell the folks at MIT what exactly the BLE implementation should be able to do, and what it cannot do now.
Yes, as already said many times, the current BLE extension is very experimental and it lacks a lot of functionality. Yet, it is fun to play around with. And, why not write your own extension if you are already skillen in Java and the Android SDK?

I am wondering about your read without notify. Does it mean you want to read some characteristic once and only when requested, via ReadIntValue for example?
Do you have a sketch for the Arduino 101 that asks for this functionality?

B.t.w. I was looking at examples for the Arduino 101 this morning and they all seem to encapsulate the BLE stuff in a way it looks like an old fashioned Arduino sketch, which the App Inventor BLE extension certainly cannot handle.

--