Android Tutorial PreferenceActivity tutorial

Cüneyt Gargin

Member
Licensed User
Longtime User
Hi, Erel,,


When I call
StartActivity(screen.CreateIntent)

I get exception :

Error occurred on line: 71 (passcheck)
android.content.ActivityNotFoundException: Unable to find explicit activity class {yupoc.trinoks.com/anywheresoftware.b4a.objects.preferenceactivity}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419)
at android.app.Activity.startActivityForResult(Activity.java:3354)
at android.app.Activity.startActivityForResult(Activity.java:3315)
at android.app.Activity.startActivity(Activity.java:3552)
at android.app.Activity.startActivity(Activity.java:3520)
at anywheresoftware.b4a.keywords.Common.StartActivity(Common.java:686)
at yupoc.trinoks.com.passcheck._btnok_click(passcheck.java:402)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:636)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:305)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:238)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:121)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:162)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:158)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:66)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4881)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)




I added
<activity android:name="anywheresoftware.b4a.objects.preferenceactivity"/>

to manifest file...

I manifest editor I added....

'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: http://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>)
AddApplicationText(<activity android:name="yupoc.trinoks.objects.preferenceactivity"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
'End of default text.


Can you help me ?
 

Bitcrawler

Member
Licensed User
Longtime User
Hi All,

for my project I use the PreferenceActivity and the CameraExClass.
It works fine until I use the Preferences Screen.

B4X:
Sub Flashlight_Click
   
    Try
        Dim flashModes As List = camEx.GetSupportedFlashModes
        If flashModes.IsInitialized = True Then
            Dim flash As String = flashModes.Get((flashModes.IndexOf(camEx.GetFlashMode) + 1) Mod flashModes.Size)
            camEx.SetFlashMode("torch")
            camEx.CommitParameters
        End If
           
        Catch
            Log("error")
    End Try
   
End Sub


Sub Flashlight_LongClick

    Try
        Dim flashModes As List = camEx.GetSupportedFlashModes
        If flashModes.IsInitialized = True Then
            camEx.SetFlashMode("off")
            camEx.CommitParameters
        End If
        Catch
            Log("error")
                   
    End Try
       
End Sub

In the Preferences Screen I use the Back Button, then I try to start Flashlight_Click again.
Now I get LastException java.lang.NoSuchMethodException: getSupportedFlashModes()


B4X:
Sub Activity_Create(FirstTime As Boolean)

    If FirstTime Then
        CreatePreferenceScreen
        If manager.GetAll.Size = 0 Then SetDefaults
    End If
    Activity.LoadLayout("P1")
    Detector.Initialize("Detector")
               
End Sub

B4X:
Sub Activity_Resume

    InitializeCamera
    HandleSettings
    Detector.Start
   
End Sub

B4X:
Private Sub InitializeCamera
    camEx.Initialize(PanelMain, frontCamera, Me, "Camera1")
    frontCamera = camEx.Front
End Sub

B4X:
Sub Activity_Pause (UserClosed As Boolean)
    camEx.Release
    Detector.Stop
'    Dim bmpClear As Bitmap
'    bmpClear.InitializeMutable(1,1)
'    pnlRose.SetBackgroundImage(bmpClear)
'    pnlNeedle.SetBackgroundImage(bmpClear)
       
End Sub

B4X:
Sub Camera1_Ready (Success As Boolean)
    If Success Then
        camEx.SetJpegQuality(90)
        camEx.CommitParameters
        camEx.StartPreview
        Log(camEx.GetPreviewSize)
        PanelMain.Visible = (False)

    Else
        ToastMessageShow("Cannot open camera.", True)
    End If
End Sub


When I go in to the Preferences, change something, close the app and start again, it works.

Any Idea?
 

Bitcrawler

Member
Licensed User
Longtime User
Thank you Erel.

Now I have the answer.
I insert Panel1.Visible = True in Activity_Resume. It works
 

Douglas Farias

Expert
Licensed User
Longtime User
@Erel
have a way to put a button to preference activity?
or a label with label_Click?

i need to make a log out on the preference activity, user open click at log out
show a msgbox2(yes, no) etc...

i see this on many apps configs, have a way to put a label with click or a button ?
 

Douglas Farias

Expert
Licensed User
Longtime User
See AHPreferenceActivity library.
i see but have only list, edittext, checkbox etc =(
any button or label click *-*
have another way to make this?
 

rosippc64a

Active Member
Licensed User
Longtime User
This library perfect for me, but one thing lack: an encryption. I cant't store password if anybody can read in the stored xml...

*******
SOLVED
*******

I solve the encryption: in the setdefaults part I set the 'default' values from my encrypted ini file. Then I open the setting screen: (StartActivity(screen.CreateIntent) see at example program).
After closing the setting screen I run a sub like in demo named handlesettings, where I save setted values to my encrypted ini file (and of course I use in the program), and clear all value from manager: manager.clearall. So what xml is saved by ahpreferenceactivity contains nothing.
 
Last edited:

David S

Member
Licensed User
Longtime User
In the v1.04 example for EditText2 you have the following line....

cat1.AddEditText2("edit2", "EditText2", "This is a number input field", "1", 2, False, True, "")

The magic number "2" is the input type. I've been trying to find the documentation that coverts DECIMAL_NUMBER (TYPE_NUMBER_FLAG_DECIMAL) into the integer value this represents.

if someone could point me in the right direction I'd appreciate it.
 

David S

Member
Licensed User
Longtime User

ahhh... well... that is one way to get a needed value. Does seem a bit like stealing. lol

So I can user et.INPUT_TYPE_DECIMAL_NUMBERS? which I assume is the value 8194.


Thanks

*** I was wrong! INPUT_TYPE_DECIMAL_NUMBERS = 12,290 (0x3002) *** 11/19 @ 1528
 
Last edited:

David S

Member
Licensed User
Longtime User
Last edited:

David S

Member
Licensed User
Longtime User
cat2.AddList("list1", "List1", "This is List1", "Black", _
Array As String("Black", "Red", "Green", "Blue"))

In the tutorial in post 1 this method is missing the Dependency parameter and causes an error when compiled.
 

bluejay

Active Member
Licensed User
Longtime User
InputType
Bit definitions for an integer defining the basic content type of text held in an Editable object. Supported classes may be combined with variations and flags to indicate desired behaviors.

Google could do better with the documentation.

First you select what type of input, in this case
TYPE_CLASS_NUMBER (value = 2)

then add flags to vary the behavious eg
TYPE_NUMBER_FLAG_DECIMAL (value = 8192)

So the final integer value = Bit.OR(TYPE_CLASS_NUMBER ,TYPE_NUMBER_FLAG_DECIMAL ) = 8194

BlueJay


 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…