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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Не производится компиляция в Android Studio. Как исправить? http://www.cyberforum.ru/android-dev/thread1339032.html
Проект пустой! Есть только начальная страница Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.internal.LoggedErrorException: Failed to run command:...
Программирование Android Не производится компиляция в Android Studio. Как исправить? Проект пустой! Есть только начальная страница Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.internal.LoggedErrorException: Failed to run command:... http://www.cyberforum.ru/android-dev/thread1339030.html
Программирование Android Поддержка разных аудио форматов разными версиями Андроид
Добрый день, Вот задумал написать аудио плеер под андроид. Вот тока не знаю какой формат какая версия поддерживает. Может кто уже делал чтото на подобии напишите табличку. Зарание спасибо.
Программирование Android Как задать параметры тексту?
Создаю TextView внутри AbsoluteLayout, который находится в LinearLayout Создаю параметры для текста. Могу задавать любые значения отступов, а он все равно остается на месте, но если текст будет в...
Программирование Android Установка Android Studio http://www.cyberforum.ru/android-dev/thread1338850.html
Операционная система Windows 7 32 1.Установлена JABA (jdk1.8.0_25) последняя на 22.12.2014 2.В системные перемененные добавлено имя перемененной JAVA_HOME и путь C:\Java\jdk1.8.0_25 3.Установлен...
Программирование Android ListView - как добавлять данные из БД в начало списка? Здравствуйте. Подскажите, пожалуйста, как сделать, чтобы при добавлении данных в БД - в ListView они попадали в начало списка. Использую SimpleCursorAdapter... подробнее

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

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

23.12.2014, 18:47. Просмотров 404. Ответов 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. Ещё обидно, что совсем не получается отладить виджеты... точки останова не работают и все плохо в общем...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru