Форум программистов, компьютерный форум CyberForum.ru

Связывание виджета на рабочем столе и CallLog - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Не производится компиляция в Android Studio. Как исправить? http://www.cyberforum.ru/android-dev/thread1339030.html
Проект пустой! Есть только начальная страница Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.internal.LoggedErrorException: Failed to run command: C:\Users\Владислав\AppData\Local\Android\sdk\build-tools\21.1.2\dx.bat --dex --no-optimize --output C:\Users\Владислав\AndroidStudioProjects\MyApplication2\app\build\intermediates\dex\debug...
Android Поддержка разных аудио форматов разными версиями Андроид Добрый день, Вот задумал написать аудио плеер под андроид. Вот тока не знаю какой формат какая версия поддерживает. Может кто уже делал чтото на подобии напишите табличку. Зарание спасибо. http://www.cyberforum.ru/android-dev/thread1338986.html
Android Как задать параметры тексту?
Создаю TextView внутри AbsoluteLayout, который находится в LinearLayout Создаю параметры для текста. Могу задавать любые значения отступов, а он все равно остается на месте, но если текст будет в LinearLayout то параметры работают... Знаю что я как то не так начал играться с параметрами но не могу понять где именно, вероятно всего с самого создания экземпляра: TV2 = new...
Android Установка Android Studio
Операционная система Windows 7 32 1.Установлена JABA (jdk1.8.0_25) последняя на 22.12.2014 2.В системные перемененные добавлено имя перемененной JAVA_HOME и путь C:\Java\jdk1.8.0_25 3.Установлен последний Android Studio 4.После запуска 'tools.jar' seems to be not in Android Studio classpath. Please ensure JAVA_HOME points to JDK rather than JRE. В чем дело?
Android ListView - как добавлять данные из БД в начало списка? http://www.cyberforum.ru/android-dev/thread1338818.html
Здравствуйте. Подскажите, пожалуйста, как сделать, чтобы при добавлении данных в БД - в ListView они попадали в начало списка. Использую SimpleCursorAdapter...
Android OpenGl ES 2.0. Некорректный поворот объекта Здравствуйте! Пытаюсь применять матрицы транформации к отрисовке объекта, но вращение происходит криво, не могу понять по чему... Мне нужно просто реализовать поворот объекта по оси z вокруг своего центра... Остальные трансформации выполняются корректно. Вот код отрисовщика: package com.contedevel.easygame.render; import android.content.Context; import android.opengl.GLES20; import... подробнее

Показать сообщение отдельно
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185

Связывание виджета на рабочем столе и CallLog - Android

23.12.2014, 18:47. Просмотров 359. Ответов 1
Метки (Все метки)

Доброго времени суток, форумчане, уже который день мучаюсь с созданием виджета под андройд. Задание примерно такое, вывести информацию о звонках в виджет на рабочем столе. В интернете нашел как выводить информацию в виджет списком с помощью адаптеров, как это делалось в обычном приложении.

Сейчас есть вот такой код, где закомментированное - мои попытки вывести информацию из CallLog, но неудачные...

MyFactory.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.example.kasnitsij.rgr;
 
import java.io.Externalizable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
 
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService.RemoteViewsFactory;
 
 
public class MyFactory implements RemoteViewsFactory
{
    ArrayList<String> data;
    //ContentResolver cr;
    Context context;
    //Cursor c;
    SimpleDateFormat sdf;
    int widgetID;
    //Uri contentUri = CallLog.Calls.CONTENT_URI;
    /*String[] projection = new String[]{
            CallLog.Calls._ID,
            CallLog.Calls.NUMBER,
            CallLog.Calls.TYPE
            };*/
    
    MyFactory(Context ctx, Intent intent) 
    {
        context = ctx;
        sdf = new SimpleDateFormat("HH:mm:ss");
        widgetID = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
        /*this.context = ctx;
        cr = ctx.getContentResolver();*/
      }
 
    @Override
    public void onCreate() 
    {
        //c = cr.query(CallLog.Calls.CONTENT_URI, projection, null, null, null);
        data = new ArrayList<String>();
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void onDataSetChanged() 
    {
        /*Cursor cursor;
        ContentResolver cr = context.getContentResolver();
        cursor = cr.query(contentUri, projection, null, null, null);
        /*while (cursor.moveToNext())
        {
            //int id = cursor.getInt(cursor.getColumnIndexOrThrow(CallLog.Calls._ID));
            String number = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
            //String type = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.TYPE));
 
            //data.add(String.valueOf(id));
            data.add(number);
            //data.add(type);
        }*/
        data.clear();
        data.add(sdf.format(new Date(System.currentTimeMillis())));
        data.add(String.valueOf(hashCode()));
        data.add(String.valueOf(widgetID));
        for (int i = 3; i < 15; i++) 
        {
          data.add("Item " + i);
        }
      }
 
    @Override
    public void onDestroy() 
    {
        //c.close();
    }
 
    @Override
    public int getCount() 
    {
        return data.size();
        /*if (c != null)
            return c.getCount();
        else 
            return 0;*/
    }
 
    @Override
    public RemoteViews getViewAt(int position) 
    {
        /*c.moveToPosition(position);
        int idIdx = c.getColumnIndex(CallLog.Calls._ID);
        String id = c.getString(idIdx);
        Uri uri = Uri.withAppendedPath(CallLog.Calls.CONTENT_URI, "" + id);
        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.item);
        rv.setImageViewUri(R.id.tvItemText, uri);
        Intent fillInIntent = new Intent();
        fillInIntent.setData(uri);
        rv.setOnClickFillInIntent(R.id.tvItemText, fillInIntent);
        return rv;*/
        RemoteViews rView = new RemoteViews(context.getPackageName(),
                R.layout.item);
            rView.setTextViewText(R.id.tvItemText, data.get(position));
            Intent clickIntent = new Intent();
            clickIntent.putExtra(MyProvider.ITEM_POSITION, position);
            rView.setOnClickFillInIntent(R.id.tvItemText, clickIntent);
 
            return rView;
      }
 
    @Override
    public RemoteViews getLoadingView() 
    {
        return null;
    }
 
    @Override
    public int getViewTypeCount() 
    {
        return 1;
    }
 
    @Override
    public long getItemId(int position) 
    {
        return position;
        /*if (c != null)
            return c.getInt(c.getColumnIndex(CallLog.Calls._ID));
        else
            return position;*/
    }
 
    @Override
    public boolean hasStableIds() 
    {
        return true;
    }
    
}

А это класс MyProvider.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.example.kasnitsij.rgr;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;
import android.widget.Toast;
 
public class MyProvider extends AppWidgetProvider
{
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    final String ACTION_ON_CLICK = "rgr.itemonclick";
    final static String ITEM_POSITION = "item_position";
    
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) 
    {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        for (int i : appWidgetIds) 
        {
          updateWidget(context, appWidgetManager, i);
        }
    }
    
    void updateWidget(Context context, AppWidgetManager appWidgetManager,
              int appWidgetId) 
    {
        RemoteViews rv = new RemoteViews(context.getPackageName(),
                R.layout.widget);
 
            setUpdateTV(rv, context, appWidgetId);
 
            setList(rv, context, appWidgetId);
 
            setListClick(rv, context, appWidgetId);
 
            appWidgetManager.updateAppWidget(appWidgetId, rv);
            appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId,
                R.id.lvList);
          }
 
          void setUpdateTV(RemoteViews rv, Context context, int appWidgetId) 
          {
            rv.setTextViewText(R.id.tvUpdate,
                sdf.format(new Date(System.currentTimeMillis())));
            Intent updIntent = new Intent(context, MyProvider.class);
            updIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
            updIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
                new int[] { appWidgetId });
            PendingIntent updPIntent = PendingIntent.getBroadcast(context,
                appWidgetId, updIntent, 0);
            rv.setOnClickPendingIntent(R.id.tvUpdate, updPIntent);
          }
 
          void setList(RemoteViews rv, Context context, int appWidgetId) 
          {
              Intent adapter = new Intent(context, MyService.class);
                adapter.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
                Uri data = Uri.parse(adapter.toUri(Intent.URI_INTENT_SCHEME));
                adapter.setData(data);
                rv.setRemoteAdapter(R.id.lvList, adapter);
          }
 
          void setListClick(RemoteViews rv, Context context, int appWidgetId) 
          {
              Intent listClickIntent = new Intent(context, MyProvider.class);
                listClickIntent.setAction(ACTION_ON_CLICK);
                PendingIntent listClickPIntent = PendingIntent.getBroadcast(context, 0,
                    listClickIntent, 0);
                rv.setPendingIntentTemplate(R.id.lvList, listClickPIntent);
          }
          
          
          @Override
        public void onReceive(Context context, Intent intent) 
          {
                super.onReceive(context, intent);
                if (intent.getAction().equalsIgnoreCase(ACTION_ON_CLICK)) 
                {
                  int itemPos = intent.getIntExtra(ITEM_POSITION, -1);
                  if (itemPos != -1) 
                  {
                    Toast.makeText(context, "Clicked on item " + itemPos,
                        Toast.LENGTH_SHORT).show();
                  }
                }
          }
}


Ещё есть класс MyService.java но там буквально пару строк для создания адаптера.

P.S. Ещё обидно, что совсем не получается отладить виджеты... точки останова не работают и все плохо в общем...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru