标签: extras

Android保持缓存我的意图额外,如何声明一个保持新鲜额外的待定意图?

几天前,我一直在努力寻找一种方法来为警报使用自定义意图.虽然我得到了明确的答案,我必须根据一些独特的ID来定制Intents,例如.setAction()还是有一些问题.

我用这种方式定义了PendingIntent:

Intent intent = new Intent(this, viewContactQuick.class);
intent.setAction("newmessage"+objContact.getId());//unique per contact
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP );
intent.putExtra("id", Long.parseLong(objContact.getId()));
intent.putExtra("results", result.toArray());

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
Run Code Online (Sandbox Code Playgroud)

然后由通知管理器使用

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
// first try to clear any active notification with this contact ID
mNotificationManager.cancel(Integer.parseInt(objContact.getId()));

// then raise a new notification for this contact ID
mNotificationManager.notify(Integer.parseInt(objContact.getId()), notification);
Run Code Online (Sandbox Code Playgroud)

这样工作如下:

  • 应用程序为联系人创建消息
  • 提供了联系ID和有关消息的详细信息的意图
  • 通过消息引发通知
  • 用户对通知的操作,应用程序显示意图传递的消息

问题

对于联系人,这可能会发生多次.并且当生成第二条消息时,通知会很好地提出(消息在那里很好)但是当用户操作它使用旧数据的通知时的意图,所以先前的消息被传递而不是全新的消息.

所以,某种意图是缓存和重用以前的额外内容.如何使每个联系人和每个操作都具有唯一性?

android extras android-intent

62
推荐指数
2
解决办法
2万
查看次数

有没有办法从偏好中添加额外的Intent?

嗨我正在从偏好设置屏幕启动活动.活动在三个偏好中共享.我想知道我是否可以在xml中为此活动设置额外内容

<Preference
    android:key="action_1"
    android:title="@string/action_1_title"
>
    <intent
        android:action="com.package.SHAREDACTION"
    >

    </intent>
</Preference>
Run Code Online (Sandbox Code Playgroud)

我想知道我能做些什么

<extras>
     <item
      android:name=""
      android:value=""/>
</extras>
Run Code Online (Sandbox Code Playgroud)

我需要做的就是传递一个整数.我可以采取不同的行动并检查行动而不是额外的行动.

android intentfilter extras android-intent

55
推荐指数
5
解决办法
3万
查看次数

Android Intent.getStringExtra()返回null

这是将字符串添加到Extras的方式:

Intent i = new Intent();
i.putExtra("Name", edt_name.getText());
i.putExtra("Description", edt_desc.getText());
i.putExtra("Priority", skb_prior.getProgress());
setResult(RESULT_OK, i);
finish();
Run Code Online (Sandbox Code Playgroud)

这是我尝试提取它们的方式onActivityResult():

String name = data.getStringExtra("Name");
String desc = data.getStringExtra("Description");
int prior   = data.getIntExtra("Priority", 50);
Run Code Online (Sandbox Code Playgroud)

但第二个代码块后namedescnull的,虽然prior有它应有的价值.此外,在调试器中,我可以看到,它data.mExtras.mMap包含所需的字符串,但仅在第一次请求之后.

string null android extras android-intent

40
推荐指数
1
解决办法
6万
查看次数

为什么PendingIntent不会为Intent发回我的自定义Extras设置?

这个问题在某种程度上与我想要在startActivityForResult中获得额外内容的问题有关,但现在我面临另一个挑战.

我已订阅接收ProximityAlerts,我已明确构建Intent以包含一些Extras.但是当我得到服务时,额外的东西不存在.

这里的答案是工作代码:

Intent intent = new Intent(this, PlacesProximityHandlerService.class);
intent.setAction("PlacesProximityHandlerService");
intent.putExtra("lat", objPlace.getLat());
intent.putExtra("lon", objPlace.getLon());
intent.putExtra("error_m", objPlace.getError()+ALERT_RANGE_IN_METERS);
PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);
LocationUtils.addProximity(this, objPlace.getLat(), objPlace.getLon(),objPlace.getError()+ALERT_RANGE_IN_METERS, -1, sender);
Run Code Online (Sandbox Code Playgroud)

文档说param PendingIntent to be sent for each location update

android extras android-intent

34
推荐指数
3
解决办法
1万
查看次数

如何才能正确地将唯一的附加内容传递给待处理的意图?

我遇到了一个问题,alarmManager并且还有与其相关的额外内容.

如果我设置多个警报,它们将会关闭,但附加功能保持不变.

我已经读过这些问题:

我试过了:

  • 为每个待处理的意图分配一个唯一的ID
  • 使用所有待定的意图标志,

一切都无济于事.我不知道为什么它不起作用.

这是一段代码:

Intent intent = new Intent(con,
                    AppointmentNotificationReciever.class);
            intent.putExtra("foo", bar.toString());


            int id = randomNum;

            PendingIntent sender = PendingIntent.getBroadcast(con, id,
                    intent, PendingIntent.FLAG_UPDATE_CURRENT);


            AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender);
Run Code Online (Sandbox Code Playgroud)

android alarmmanager extras android-intent android-pendingintent

23
推荐指数
2
解决办法
2万
查看次数

当我的活动依赖于通过Intent传递的额外内容时,如何编写android JUnit测试?

我正在为一个依赖于通过Intent传递给它的额外内容的类编写一个Android Junit测试.我能够让课程正常工作,但我仍然想知道如何为这样的课程编写单元测试,因为测试仍然失败.

public class AddClassEvent extends Activity{
 private String eventType;

  @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  Bundle extras = getIntent().getExtras();
  final String cNo = extras.getString("CourseNum");

  // create a model instance
  final StudentDBModel model = new StudentDBModel(this);

  setContentView(R.layout.add_class_event);
 .....
 .....
         }
     }
Run Code Online (Sandbox Code Playgroud)

测试类看起来像......

public class AddClassEventTest extends ActivityInstrumentationTestCase2<AddClassEvent>{
 private StudentDBModel model = null;
 private RenamingDelegatingContext context = null;

 public AddClassEventTest() {
  super("com.UI", AddClassEvent.class);
 }

 /**
  * This method is called before each test.
  */
 @Override
 public void setUp() {
  context …
Run Code Online (Sandbox Code Playgroud)

junit android extras android-intent

18
推荐指数
2
解决办法
1万
查看次数

对AlarmManager.setRepeating的多次调用提供了相同的Intent/PendingIntent额外值,但我提供了不同的值

在写这个问题时解决了,但发布以防万一:

我正在设置这样的多个警报,具有不同的值id:

AlarmManager alarms = (AlarmManager)context.getSystemService(
        Context.ALARM_SERVICE);
Intent i = new Intent(MyReceiver.ACTION_ALARM);  // "com.example.ALARM"
i.putExtra(MyReceiver.EXTRA_ID, id);  // "com.example.ID", 2
PendingIntent p = PendingIntent.getBroadcast(context, 0, i, 0);
alarms.setRepeating(AlarmManager.RTC_WAKEUP, nextMillis, 300000, p);  // 5 mins
Run Code Online (Sandbox Code Playgroud)

......并像这样接收它们:

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_ALARM)) {
        // It's time to sound/show an alarm
        final long id = intent.getLongExtra(EXTRA_ID, -1);
Run Code Online (Sandbox Code Playgroud)

警报在适当的时间传递给我的接收器,但通常EXTRA_ID设置为错误的值:它是我在某个时刻使用的值,而不是我想要在那个特定时间传递的值.

android extras alarms android-pendingintent

17
推荐指数
2
解决办法
1万
查看次数

startActivityForResult和Intents Extras,似乎额外的东西不会被推回

我有这个代码:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        intent.setData(ContactsContract.Contacts.CONTENT_URI);
        intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag());
        startActivityForResult(intent, PICK_CONTACT);
Run Code Online (Sandbox Code Playgroud)

然后回复:

public void onActivityResult(int reqCode, int resultCode, Intent data) {


        switch (reqCode) {
            case (PICK_CONTACT):
                if (resultCode == Activity.RESULT_OK) {
                    try {
                        Uri contactData = data.getData();
                        String onlineid = data.getStringExtra(EXTRA_ONLINE_ID);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                break;
        }
        super.onActivityResult(reqCode, resultCode, data);
    }
Run Code Online (Sandbox Code Playgroud)

onlineid变量为空.我怎样才能传递一个值然后再接收它?

编辑

我甚至试过,

Bundle extras = data.getExtras(); // returns null
Run Code Online (Sandbox Code Playgroud)

android extras android-intent

17
推荐指数
1
解决办法
9125
查看次数

Android:从"最近的应用程序"启动应用程序启动它与意图中使用的最后一组附加功能

这里有点困惑的问题:

我有一个主屏幕小部件,当点击它时,启动我的主应用程序Activity,并在意图中添加一些额外内容:

Intent start = new Intent(context, Main.class);
start.putExtra("action", "showXYZ");
start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(start);
Run Code Online (Sandbox Code Playgroud)

这一切都很好,它开始我的活动,我的活动按预期收到额外的.它处理这些额外内容并开始另一项活动.

一旦用户点击主屏幕小部件并以这种方式启动主要活动,通过"最近的应用程序"方法进入应用程序(按住"主页"键)将启动主要活动及其他内容 - 导致处理发生我不想要(并导致第二个活动打开,而不是仅显示主活动).

这有什么解决方法吗?从"最近的应用程序"方法启动应用程序时,我想简单地启动Main活动而不使用最后一组附加功能.

非常感谢您的帮助!r3mo

注意:我在Android 1.5上

编辑:

在这里找到了一个解决方法: Android保持缓存我的意图额外,如何声明一个保留新鲜额外的待处理意图?

我将为窗口小部件引发的意图添加时间戳,并检查Main.java中的时间戳是否是最近的.如果是,我将继续处理.如果没有,我将只显示Main.java活动.

很想知道是否有任何官方解决方案.

android extras android-intent android-activity

13
推荐指数
3
解决办法
6546
查看次数

将用户定义对象的arraylist传递给Intent android

我试图将arraylist的结构传递给如下的意图,在我正在使用的调用函数中

ArrayList<Parliament> s=(ArrayList<Parliament>)msg.obj;                                 
Intent i = new Intent(ReadTasks.this, GenrateTasks.class);                          
i.putExtra("tasks", s);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

并在被调用的函数中

Bundle b = getIntent().getExtras();
if(b!=null)
{           
    ArrayList<Parliament> as = (ArrayList<Parliament>)b.getSerializable("tasklist");
}
Run Code Online (Sandbox Code Playgroud)

我已经在两个类中给出了可序列化的实现,但是我无法编组...在行启动活动的调用函数中运行时错误.请帮忙怎么办!

编辑1:堆栈跟踪:

04-01 22:21:53.999: E/AndroidRuntime(2078): FATAL EXCEPTION: main
04-01 22:21:53.999: E/AndroidRuntime(2078): java.lang.RuntimeException: Parcel: unable to marshal value com.viralm.readjson.Parliament@413597f0
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeValue(Parcel.java:1137)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeList(Parcel.java:524)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeValue(Parcel.java:1097)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeMapInternal(Parcel.java:493)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeBundle(Parcel.java:507)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.content.Intent.writeToParcel(Intent.java:5846)
04-01 22:21:53.999: E/AndroidRuntime(2078): …
Run Code Online (Sandbox Code Playgroud)

android bundle extras android-intent

8
推荐指数
1
解决办法
3万
查看次数