Diskuze: [Android]Příklad AndroidGPSTracking

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V AndroidManifest.xml treba permission
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
.
.
.
File file;
//test či je vložená externá pamäťová karta
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
file = new File(Environment.getExternalStorageDirectory() + File.separator + "nazovSuboru.pripona");
}
else {
//ak nie je vložená karta zapíš súbor do internej pamäete
file = new File(getFilesDir(), "nazovSuboru.pripona");
}
Takto by mala byť ozátvorkovaná metóda onCreate, ak máš potom stále
nejaké chyby tak už len na konci poodmazávaj zátvorky. Ale takú chybu by si
mal ľahko aj sám nájsť
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
checkBox2 = (CheckBox) findViewById(R.id.checkBox2);
// Přiřazení Click listeneru tlačítku pro zobrazení souřadnic
btnShowLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// Vytvoření instance třídy GPSTracker
gps = new GPSTracker(AndroidGPSTrackingActivity.this);
// Kontrola, zda je zapnuta GPS v zařízení
if (gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
if (checkBox1.isChecked()) {
SmsManager smsManager = SmsManager.getDefault();
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm");
String formattedDate = df.format(c.getTime());
String sms = "http://maps.google.com/maps?f=g&g=" + Double.toString(lat) + "," + Double
.toString(
lon) + "&z16";
//sms=sms+Double.toString(lon);
//public String f= formattedDate+"\n"+sms;
s = formattedDate + "\n" + sms + "\n";
smsManager.sendTextMessage("123456978", null, formattedDate + "\n" + sms, null, null);
datum = formattedDate;
}
if (checkBox2.isChecked()) {
if (isWriteable()) {
write();
}
}
Toast.makeText(
getApplicationContext(),
"Gps souřadnice jsou - \nLat: " + latitude + "\nLong: " + longitude,
Toast.LENGTH_LONG
).show();
} else {
// Pokud nemůžeme získat souřadnice pomocí GPS
// nebo je získání souřadnic pomocí sítě vypnuto
// zobrazíme uživateli dialogové okno
gps.showSettingsAlert();
}
}
});
}
velice děkuji za
názorný příklad s těmi závorkami ale pořád se to nedaří ten soubor
uložit na SD kartu pořád to ukládá do interní paměti tak jsem to upravil
ale zřejmě špatně jak to upravit aby to fungovalo ? díky
private void write()
{
File sdCard= new File (Environment.getExternalStorageDirectory()+File.separator+"/msoubory");
if (!sdCard.exists()){
sdCard.mkdir();
}
File f= new File(sdCard.getAbsolutePath()+File.separator,"Lokace.txt");
try
{ .
.
.
Môžeš si prečítať dokumentáciu https://developer.android.com/…e/files.html#… a použiť spôsob aký je uvedený v nej.
public File getPrivateStorageDir(Context context, String albumName) {
// Get the directory for the app's private directory.
File file = new File(context.getExternalFilesDir(null), "fileName");
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
Prípade skúsiť zadať priamo cestu
File file = new File("/sdcard/file.txt");
a daný súbor poslať do output streamu. Hlavne nezabudni dať do manifestu povolenie pre zápis na SD kartu
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Na tom odkazu jsem byl už před tvým upozorněným ale vše marné dělám co mě napadne nebo co mi doporučíte ale ne a ne dosáhnout kýženého výsledku.Kdyby alespoň po připojení telefonu na PC byl ten soubor vidět ale ono ne, dostanu se do něho jen aplikace v telefonu Total Commander díky
Tak trocha som Googlil a naozaj Environment.getExternalStorageDirectory() nemusí nutne vrátiť cestu k SD karte, viz. dokumentáciu
Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer.
Preto môžeš použiť getExternalFilesDirs(null))
Returns absolute paths to application-specific directories on all shared/external storage devices where the application can place persistent files it owns. These files are internal to the application, and not typically visible to the user as media.
a teda väčšinou druhý priečinok by mal byť ten na SD karte. Súbor potom nájdeš v sdkarta/Android/data/packageName/tvojSubor
private void writeFileToSdCard() {
String testData = "teeeeeeeeeeeeeeest";
FileOutputStream fos = null;
try {
File file = null;
File[] storages = getExternalFilesDirs(null);
if(storages.length > 1 && Objects.equals(
Environment.getExternalStorageState(storages[1]),
Environment.MEDIA_MOUNTED)
) {
file = new File(storages[1], "testFile.txt");
}
if (file != null) {
fos = new FileOutputStream(file, true);
fos.write(testData.getBytes());
fos.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Ale ta funkce ** getExternalFilesDirs(null)) je dostupná ve vyšších API
ale já mám androidmanifestu nastavenou API 8 díky
Veď už je API 27 nechceš zvážiť zvýšiť to z 8?
No o to mi právě jde jestli to bude fungovat v telefonu s Androidem 4.4.2
?.A další věc napadlo mě ještě zkusit tu apku nainstalovat do telefonu
IGET star P350 který mám jako relikvii zdálnověku kde je android 2.3.5 a tam to
vytvoří na SD kartě textový soubor který je i dostupný i PC po připojení
pomocí USB . Ještě mě zaráží jedna věc ten vyexpedovaný soubor apk má
cca velikost 800 k ale ten co ho upravuji AndroidGPSTracking aby mě ukládal
souřadnice do textového souboru má jen 19 k .Asi tak mě ta apka fungovala to
znamená zapisovala do textového souboru do interní paměti telefonu (Aligator
s4060 duo )bez viditelnosti na PC tak jsem to upravoval a upravoval až to
nevytváří nic bohužel jsem si po každé úpravě neověřil velikost
výsledného souboru apk
Veď treba čítať tú dokumentáciu getExternalFilesDirs) - added in API level 19, Android 4.4 APIs - API Level: 19, takže áno bude to
fungovať.
Pre také prípady odporúčam všetko si verziovať a budeš mať prehľad o
všetkom čo si v danom projekte menil - odporúčam Git a dokonca tu o tom
nájdeš aj článok https://www.itnetwork.cz/software/git
Zobrazeno 11 zpráv z 11.