Moin,
ich hätte weiterhin Interesse mich mit Android zu beschäftigen bzw. private Projekte zu starten.
Vielleicht hat ja noch jemand Interesse....
Moin,
ich hätte weiterhin Interesse mich mit Android zu beschäftigen bzw. private Projekte zu starten.
Vielleicht hat ja noch jemand Interesse....
Hallo Leute,
auch wenn ich erst vor kurzen ein Thread aufgemacht habe, muss ich gleich nochmals eins aufmachen. Da ich noch eine weitere Frage habe.
Ich habe einen Broadcast Receiver programmiert, der bei der Aktion ACTION_BOOT_COMPLETED startet.
Siehe hier:
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive( Context context, Intent intent ) {
if(Intent.ACTION_BOOT_COMPLETED.equals( intent.getAction() ))
context.startService( new Intent(context,AlarmService.class) );
}
}
Wie im Quellcode zu sehen rufe ich dann denn AlarmService auf. Innerhalb dieses Services überprüfe ich einen Server ob eine neue Nachricht vorliegt.
Falls der Server eine neue Nachricht für mich hat, möchte ich diese in einer Activity anzeigen.
Meine frage ist jetzt wie bekommt man die Nachricht in die Activity hinein. Ich meine ein gebundener Service funktioniert doch nicht, da die Applikation noch gar nicht läuft zu diesen Zeitpunkt. Oder läuft diese bereits zu diesen Zeitpunkt im Hintergrund?
Meine Idee wäre die Nachricht von den Service aus in eine Datei zu schreiben und dann von der Applikation wieder auslesen zu lassen. Und natürlich vorher die Applikation starten.
LG
Danke schon mal für eure Infos!!
Hallo Leute,
ich habe eine Testklasse geschrieben, mit der ich die GPS Daten über ein Mock Objekt beziehe möchte.
Hier erstmal der Code:
package de.reichenbach.resident.test.network;
import de.reichenbach.resident.view.ResidentActivity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.test.ActivityInstrumentationTestCase2;
public class LocationMockProviderTest extends ActivityInstrumentationTestCase2<ResidentActivity>
implements LocationListener {
private static final String PROVIDER = "gps";
private ResidentActivity resident;
private LocationManager locationManager;
private double latitude;
private double longitude;
public LocationMockProviderTest(String name) {
super(ResidentActivity.class);
setName( name );
}
/* (non-Javadoc)
* @see android.test.ActivityInstrumentationTestCase2#setUp()
*/
@Override
protected void setUp() throws Exception {
initLocation();
}
private void initLocation() {
this.resident = getActivity();
this.locationManager = (LocationManager) this.resident.getSystemService( getActivity().
getApplicationContext().LOCATION_SERVICE );
this.locationManager.addTestProvider( PROVIDER, false, true, false, true, true, true, true, android.location.Criteria.POWER_HIGH, android.location.Criteria.ACCURACY_FINE );
this.locationManager.setTestProviderEnabled( PROVIDER, true );
this.locationManager.setTestProviderStatus(PROVIDER, LocationProvider.AVAILABLE, null, System.currentTimeMillis());
this.locationManager.requestLocationUpdates( PROVIDER, 0, 0, this );
Location location = new Location(PROVIDER);
location.setLatitude(10.0);
location.setLongitude(20.0);
location.setTime(System.currentTimeMillis());
locationManager.setTestProviderLocation(PROVIDER, location);
}
public void onLocationChanged( Location location ) {
this.latitude = location.getLatitude();
this.longitude = location.getLongitude();
}
public void onProviderDisabled( String provider ) {
// TODO Auto-generated method stub
}
public void onProviderEnabled( String provider ) {
// TODO Auto-generated method stub
}
public void onStatusChanged( String provider, int status, Bundle extras ) {
// TODO Auto-generated method stub
}
public void testLocationProvider() {
int latitude = 10;
int longitude = 20;
assertEquals( latitude, ((int) this.latitude) );
}
/* (non-Javadoc)
* @see android.test.ActivityInstrumentationTestCase2#tearDown()
*/
@Override
protected void tearDown() throws Exception {
locationManager.removeTestProvider(PROVIDER);
}
}
Alles anzeigen
Mein Problem besteht darin das die Methode onLocationChanged nicht aufgerufen wird. Daher wird das natürlich auch nichts mit den Test.
Die entsprechende Berechtigung habe ich vergeben!
Hoffe jemand von euch hat eine Idee woran das liegt?!
Danke schonmal
Liebe Grüße
hat keiner ne idee?
Danke erstmal für deine Antwort, aber leider hilft mir das nicht so recht weiter.
Und den Link zur Doku habe ich mir schon angeschaut aber leider hilft mir dies nicht.
Hier nochmal die komplette Klasse, die für das wechseln zwischen den Fragmenten zuständig ist:
import org.codeandmagic.android.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewManager;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.TabHost.TabSpec;
import android.widget.TabHost.OnTabChangeListener;
public class TabFragment extends Fragment implements OnTabChangeListener {
public static final String TAB_CONFIG = "config";
public static final String TAB_AUTO = "auto";
public static final String TAB_MANUAL = "manual";
/** TabBar View */
private View tabView;
/** TabWarapper */
private TabHost tabWrapper;
/** FragmentTransaction */
private FragmentTransaction transaction;
/** Fragments */
private AutoFragment auto;
private ConfigFragment config;
private ManualFragment manual;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
init(inflater);
createTabElements();
this.tabWrapper.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
updateFragment(tabId);
}
});
return tabView;
}
private void init(LayoutInflater inflater) {
this.tabView = inflater.inflate(R.layout.tabs_fragment, null);
this.tabWrapper = (TabHost) tabView.findViewById(android.R.id.tabhost);
this.config = new ConfigFragment();
this.auto = new AutoFragment();
this.manual = new ManualFragment();
this.transaction = getFragmentManager().beginTransaction();
// fragmentForChange is a FrameLayout
this.transaction.add(R.id.fragmentForChange,this.auto);
this.transaction.add(R.id.fragmentForChange, this.config);
this.transaction.commit();
}
/** create tab elements */
private void createTabElements() {
tabWrapper.setup(); // important!
tabWrapper.addTab(newTab(TAB_CONFIG, R.string.tab_config, R.id.tab_config));
tabWrapper.addTab(newTab(TAB_AUTO, R.string.tab_auto, R.id.tab_auto));
tabWrapper.addTab(newTab(TAB_MANUAL, R.string.tab_manual, R.id.tab_manual));
}
private TabSpec newTab(String tag, int labelId, int tabContentId) {
View indicator = LayoutInflater.from(getActivity()).inflate(
R.layout.tab, (ViewGroup) tabView.findViewById(android.R.id.tabs), false);
((TextView) indicator.findViewById(R.id.text)).setText(labelId);
TabSpec tabSpec = tabWrapper.newTabSpec(tag);
tabSpec.setIndicator(indicator);
tabSpec.setContent(tabContentId);
return tabSpec;
}
public void updateFragment(String tabId) {
if(tabId.equals(TAB_CONFIG))
this.transaction.show(this.config);
else
this.transaction.hide(this.config);
if(tabId.equals(TAB_AUTO))
this.transaction.show(this.auto);
else
this.transaction.show(this.auto);
this.transaction.commit();
}
public void onTabChanged(String tabId) { }
}
Alles anzeigen
Hier auch nochmal die Fehlermeldung die kommt:
04-18 11:25:09.791: W/dalvikvm(391): threadid=1: thread exiting with uncaught exception (group=0x40014760)
04-18 11:25:09.811: E/AndroidRuntime(391): FATAL EXCEPTION: main
04-18 11:25:09.811: E/AndroidRuntime(391): java.lang.IllegalStateException: commit already called
04-18 11:25:09.811: E/AndroidRuntime(391): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:499)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:491)
04-18 11:25:09.811: E/AndroidRuntime(391): at de.fhluebeck.android.fragment.TabFragment.updateFragment(TabFragment.java:97)
04-18 11:25:09.811: E/AndroidRuntime(391): at de.fhluebeck.android.fragment.TabFragment$1.onTabChanged(TabFragment.java:45)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:378)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.widget.TabHost.setCurrentTab(TabHost.java:363)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:149)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:559)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.view.View.performClick(View.java:3110)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.view.View$PerformClick.run(View.java:11934)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.os.Handler.handleCallback(Handler.java:587)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.os.Handler.dispatchMessage(Handler.java:92)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.os.Looper.loop(Looper.java:132)
04-18 11:25:09.811: E/AndroidRuntime(391): at android.app.ActivityThread.main(ActivityThread.java:4123)
04-18 11:25:09.811: E/AndroidRuntime(391): at java.lang.reflect.Method.invokeNative(Native Method)
04-18 11:25:09.811: E/AndroidRuntime(391): at java.lang.reflect.Method.invoke(Method.java:491)
04-18 11:25:09.811: E/AndroidRuntime(391): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
04-18 11:25:09.811: E/AndroidRuntime(391): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
04-18 11:25:09.811: E/AndroidRuntime(391): at dalvik.system.NativeStart.main(Native Method)
Alles anzeigen
Vielleicht hat ja einer von euch den entscheidenden Tip
Habe nun gelesen das man kein Fragment mit einen anderen Fragment ersetzen kann. Aber wie soll das dann gehen????
Hab noch ein wenig rum probiert aber leider bisher ohne Erfolg.
Also ich habe wie du bereits im Code sehen konntest, ein TabMenü. Wenn der Benutzer jetzt auf das ein Element im TabMenü klickt
möchte ich das entsprechende Fragment angezeigt wird.
Also z.B. klickt der Benutzer auf die Tabelement config soll die ConfigFragment geladen werden, klickt er danach auf auto soll das AutoFragment
angezeigt bzw. geladen werden.
Hier noch ein Code Schnipsel der hoffentlich zeigt was ich meine:
this.tabWrapper.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
if(tabId.equals(TAB_CONFIG)) {
transaction.replace(R.id.wrapperFragment, config);
transaction.commit();
}
if(tabId.equals(TAB_AUTO)){
transaction.replace(R.id.wrapperFragment, auto);
transaction.commit();
}
}
});
Alles anzeigen
Hoffe jetzt ist es deutlicher was ich machen möchte.
Hallo Leute,
ich habe eine Activity die sich aus drei Fragmenten zusammensetzt.
Hier mal der Code von der Layoutdatei:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
class="de.fhluebeck.android.fragment.TabFragment"
android:id="@+id/tab_fragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
class="OSMapFragment"
android:id="@+id/map_fragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<fragment
class="ConfigFragment"
android:id="@+id/config_fragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
Alles anzeigen
Im TabFragment habe ich ein Tabmenü erstellt, auch hierzu mal der Code:
import org.codeandmagic.android.R;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.TabHost.TabSpec;
import android.widget.TabHost.OnTabChangeListener;
public class TabFragment extends Fragment implements OnTabChangeListener {
public static final String TAB_CONFIG = "config";
public static final String TAB_AUTO = "auto";
public static final String TAB_MANUAL = "manual";
/** TabBar View */
private View tabView;
/** TabWarapper */
private TabHost tabWrapper;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.tabView = inflater.inflate(R.layout.tabs_fragment, null);
this.tabWrapper = (TabHost) tabView.findViewById(android.R.id.tabhost);
createTabElements();
return tabView;
}
/** create tab elements */
private void createTabElements() {
tabWrapper.setup(); // important!
tabWrapper.addTab(newTab(TAB_CONFIG, R.string.tab_config, R.id.tab_config));
tabWrapper.addTab(newTab(TAB_AUTO, R.string.tab_auto, R.id.tab_auto));
tabWrapper.addTab(newTab(TAB_MANUAL, R.string.tab_manual, R.id.tab_manual));
}
private TabSpec newTab(String tag, int labelId, int tabContentId) {
View indicator = LayoutInflater.from(getActivity()).inflate(
R.layout.tab, (ViewGroup) tabView.findViewById(android.R.id.tabs), false);
((TextView) indicator.findViewById(R.id.text)).setText(labelId);
TabSpec tabSpec = tabWrapper.newTabSpec(tag);
tabSpec.setIndicator(indicator);
tabSpec.setContent(tabContentId);
return tabSpec;
}
public void onTabChanged(String tabName) {
// was muss hier rein???
}
}
Alles anzeigen
Wenn der Benutzer auf ein Tabelement klickt, also die Methode onTabChange aufgerufen wird, soll das Fragment ConfigFragment ersetzt werden mit einen anderen Fragment. Vielleicht könntet ihr mir ein Tip geben wie dies gehen könnte?!
Bzw. würde mir es schon reichen wenn Ihr mir sagen könnt, wie ich an die Instanz ConfigFragment heran komme?!
LG
Du brauchst nichts weiter. Deine Klasse muss nur von Activity erben, aber das macht sie ja mehr oder weniger automatisch.
Da es ja sonst keine Activity ist, die man auf den Bildschirm sehen kann.
Moin,
ZitatJede Activity in der ich eine ActionBar einbinden möchte muss mit dem zusatz "extends ActionBarActivity" beginnen.
Dieser Zusatz von den du sprichst, nennt sich Vererbung. Also das heißt in der Klasse in der du extends ActionBarActivity aufrufst bzw. schreibst, erbt von der Klasse ActionBarActivity.
Und nein du musst nicht in jeder Actvity wo du eine ActionBar verwenden möchtest davon erben. Das geht wesentlich einfacher.
1. Schritt: Als erstes musst du ein Menu erzeugen
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:title="Info" android:id="@+id/info" android:showAsAction="ifRoom|withText"/>
<item android:title="Einstellung" android:id="@+id/seeting" android:showAsAction="ifRoom|withText"/>
</menu>
2. Schritt: überschreibst du die Methode onCreateOptionsMenu
package de.reichenbach.actionbar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
public class ActionBarActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbar, menu);
return true;
}
}
Alles anzeigen
So mehr ist es gar nicht, natürlich musst du dich noch um die Interaktion kümmern und und und....
Aber so hast du erstmal ein Einstieg (hoffe ich mal) und gibt ja auch recht viele Tutorial darüber, die teilweise nicht schlecht sind.
Oder was ich dir auch empfehlen kann bei GitHub mal nach ActionBar zu suche, da findest du Projekte wo Leute dies
implementiert haben.
Hallo Leute,
eine Testmethode schlägt bei mir leider fehl und ich weiß nicht so recht woran es liegt.
Hier erstmal meine Testklasse:
package de.resident.test.viewlayer;
import de.reichenbach.resident.viewlayer.PreferencesActivity;
import android.app.Instrumentation;
import android.content.SharedPreferences;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import android.view.KeyEvent;
public class PreferencesActivityTest extends ActivityInstrumentationTestCase2<PreferencesActivity> {
// keys of the elements
private static final String LASTNAME = "lastname";
private static final String FIRSTNAME = "firstname";
private static final String YEAROFBIRTH = "year_of_birth";
private static final String IDENTIFICATION = "identification";
private static final String UPDATEINTERVAL = "updatesInterval";
/** to be tested activity */
private PreferencesActivity activity;
/** EditTextPreference firstname */
private EditTextPreference firstname;
/** EditTextPreference lastname */
private EditTextPreference lastname;
/** EditTextPreference yearOfBirth */
private EditTextPreference yearOfBirth;
/** EditTextPreference identification */
private EditTextPreference identification;
/** ListPreference ListPreference */
private ListPreference updateInterval;
/** access config data */
SharedPreferences preferences;
/** Instrumentation */
private Instrumentation instrumentation;
/**
* @param string name of the class
* set the class name
*/
public PreferencesActivityTest(String string) {
super(PreferencesActivity.class);
setName(string);
}
/* (non-Javadoc)
* @see android.test.ActivityInstrumentationTestCase2#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(false);
activity = getActivity();
firstname = (EditTextPreference) activity.findPreference(FIRSTNAME);
lastname = (EditTextPreference) activity.findPreference(LASTNAME);
yearOfBirth = (EditTextPreference) activity.findPreference(YEAROFBIRTH);
identification = (EditTextPreference) activity.findPreference(IDENTIFICATION);
updateInterval = (ListPreference) activity.findPreference(UPDATEINTERVAL);
preferences = PreferenceManager.getDefaultSharedPreferences(activity);
instrumentation = getInstrumentation();
}
/** instances not null */
public void testPreCondition() {
assertNotNull(activity);
assertNotNull(firstname);
assertNotNull(lastname);
assertNotNull(yearOfBirth);
assertNotNull(identification);
assertNotNull(updateInterval);
}
public void testLastnameInteraction() {
selectLastname();
sendRepeatedKeys(1,KeyEvent.KEYCODE_H);
String s = preferences.getString(LASTNAME, " n/a");
Log.d("Test", "Ausgabe:"+s);
assertEquals(s, "H");
}
/** focus lastname */
private void selectLastname() {
try {
runTestOnUiThread(new Runnable() {
@Override
public void run() {
lastname.getEditText().requestFocus();
}
});
} catch (Throwable e) {
e.printStackTrace();
}
instrumentation.waitForIdleSync();
}
}
Alles anzeigen
Die Methode testPreCondition läuft noch einwandfrei durch, nur bei der testLastnameInteraction schlägt JUnit ein Fehler.
Wie ihr seht habe ich da zum testen eine Testausgabe geschrieben (Log.d... ) diese gibt mir den default Value zurück also "n/a"
Laut Doku existiert diese preference nicht, was ja aber nicht sein kann weil, dann die Methode testPreCondition bereits Fehler schmeißen müsste,
was sie ja aber nicht tut.
Ich denke mal das hat was mit der private Methode zu tun, aber was genau und wie man das Problem behebt weiß ich nicht
Hoffe ihr könnt mir Helfen....
Liebe Grüße
Moin,
an ein Spiel habe ich bisher noch nie gedacht, da ich es eigentlich erstmal mit einen kleinen App anfangen wollte. Aber leider fehlt es mir an einer
guten Idee.
Aber interesse an der Entwicklung eines Spieles hätte ich schon. Müsste mich da zwar in OpenGL und ähnliches erstmal einarbeiten,
aber das ist weniger das Problem.
Müsste man mal über Telefon oder Skype näheres abklären würde ich sagen.
LG
Hallo Leute,
beschäftige mich erst seit kurzen mit der Programmierung von Android Apps aber würde gerne gemeinsam mit jemanden mein erstes App programmieren. Weil ich der Meinung bin das in ein Team zu entwickeln mehr Spaß macht und auch am Ende ein besseres Ergebnis bei raus kommen kann.
Für eine Zusammenarbeit wäre es gut wenn ihr aus den Raum Lübeck/Hamburg kommt, da man sich dann auch mal treffen könnte.
Aber ist natürlich kein muss, es gibt ja Handy, Email und co.
Noch kurz zu mir bin 24 und studiere derzeit Informatik/Softwaretechnik im 5. Semester. Also habe bereits Kenntnisse Java, Datenbanken....
Nur halt mit Android Programmierung beschäftige ich mich erst seit kurzen wie gesagt.
Also wenn ihr Interesse habe oder ihr jemanden sucht mit den ihr ein Projekt angehen könnt, dann meldet euch einfach mal
LG