Первые шаги в Android
будет постепенно изменяться и дополняться по мене вникания в процесс :)Злостная Android Studio
Эта "сильная пре-альфа" отказывается нормально работать не только без интернета, но и с прокси. Источник бед — maven, который лезет за обновлениями gradle при каждом создании, а то и открытии проекта. На данный момент победить получилось только настройкой прозрачного прокси через iptables:sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination SQUID_IP:PORT
После этого все данные gradle смогли таки скачаться и новый проект был успешно создан…
Dropbox в Android Studio
Подключение библиотек оказалось не слишком тривиальной задачей :(1. Качаем SDK и куда-нибудь распаковываем
2. В папке проекта AppNameProject/AppName создаём папочку libs и копируем в неё содержимое libs из SDK.
3. В дереве проекта студии находим AppName/libs/dropbox-sync-sdk-android.jar, правый клик, "Add as Library..."
4. Открываем на редактирование AppName/build.gradle
4.1. Добавляем в блок dependencies строку про нашу библиотеку. Должно получиться так:
dependencies {
compile 'com.android.support:support-v4:18.0.0'
compile files('libs/dropbox-sync-sdk-android.jar')
}
4.2. Добавляем копирование нативных библиотек, иначе ничего не будет запускаться:
task copyNativeLibs(type: Copy) {
from(new File('libs')) { include '**/*.so' }
into new File(buildDir, 'native-libs')
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniDir new File(buildDir, 'native-libs')
}
После этого запускаем сборку и повторяем п.п. 2-4 до просветления. Порой, приходится лезть в настройки проекта (F4), удалять добавленную библиотеку и добавлять всё это заново.
Кусочки полезных функций
Убрать заголовок окна://...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//...
Получить список СМС с именами контактов:
// AndroidManifest.xml
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
//main.java
// smslist = new ArrayList<arraylist<SMSData>>();
// используется в ExpandableList
Uri uri = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uri, null, null, null, "date DESC" );
if (c != null) {
if (c.moveToFirst()) {
/* SMS fields:
_id, thread_id, address, person, date, date_sent, protocol, read, status, type,
reply_path_present, subject, body, service_center, locked, error_code, seen
*/
try {
for(int i=0; i< c.getCount(); i++) { // do..while(c.MoveToNext() работает странно :(
if (stop_sms_fill) break;
SMSData sms = new SMSData();
sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
sms.setSender(c.getString(c.getColumnIndexOrThrow("address")).toString());
sms.set_id(c.getInt(c.getColumnIndexOrThrow("_id")));
sms.setThread(c.getInt(c.getColumnIndexOrThrow("thread_id")));
// Person lookup
Uri plook = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
sms.getSender().toString());
Cursor pc = getContentResolver().query(plook,
new String[]{ContactsContract.Data.DISPLAY_NAME},
null, null, null);
try {
pc.moveToFirst();
sms.setPerson(pc.getString(0));
}
catch (android.database.CursorIndexOutOfBoundsException e) {
sms.setPerson("");
}
catch (Exception e) {
Log.e("AV", "Find person fail: " + e.getClass() + ", " + e.getLocalizedMessage());
sms.setPerson("");
}
finally {
pc.close();
}
// End person lookup
Log.d("AV", "Person: " + c.getString(c.getColumnIndexOrThrow("person")));
for (ArrayList<SMSdata> a : smslist) {
if (stop_sms_fill) break;
Log.d("AV", "Enum group " + a.get(0).getSender());
for (SMSData sd : a) {
if (stop_sms_fill) break;
Log.d("AV", "CMP '" + sd.getSender() + "' vs '" + sms.getSender() +"'");
if (sd.getThread() == sms.getThread()) {
Log.d("AV", "Add " + sms.getPerson() + " to " + sms.getSender());
a.add(sms);
sms = null;
break;
}
}
if (sms == null) break;
}
if (sms != null) {
Log.d("AV", "Add Group " + sms.getSender());
ArrayList<SMSdata> a = new ArrayList<SMSdata>();
a.add(sms);
smslist.add(a);
}
c.moveToNext();
}
}
catch (Exception e) {
Toast t = Toast.makeText(this, "Failed to fill SMS list: "+ e.getLocalizedMessage(), Toast.LENGTH_SHORT);
t.show();
Log.e("AV", "Exception in fill SMS list: " + e.getLocalizedMessage());
return false;
}
finally {
c.close();
}
}
}
//...
.
Online Gambling with PayPal | JT Hub
ОтветитьУдалитьPlay slots and live 공주 출장안마 casino games using PayPal and 강원도 출장마사지 other payment 보령 출장샵 methods at JT Hub. Join today and get your 순천 출장안마 100% up 익산 출장마사지 to £100 free and