标签: android-pendingintent

通过警报启动服务不起作用

我有以下广播接收器,当手机启动时被调用(Bootreciever.java)并且我正在尝试使用重复警报启动间歇运行的服务.

public void onReceive(Context context, Intent intent) {

    Toast.makeText(context,"Inside onRecieve() :D" , Toast.LENGTH_LONG).show();
    Log.d(getClass().getName(), "Inside onRecieve() :D");


    AlarmManager am = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);


    Intent i = new Intent(context, MyService.class);

    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);

    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 3000, 1000, pi);

}
Run Code Online (Sandbox Code Playgroud)

基本上,我设置一个重复警报触发3秒,之后每秒触发一次.收到启动完成广播就好 - 但服务没有启动.MyService.java看起来像这样:

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Toast.makeText(this, "Hello from MyService!", Toast.LENGTH_LONG); …
Run Code Online (Sandbox Code Playgroud)

service android broadcastreceiver android-pendingintent repeatingalarm

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

待处理的意图不在服务创建的通知中工作

我有两个活动A和B.A在应用程序启动时启动.我有一个从A发起的服务.

这是活动A中的代码.

Button btnStart = (Button) findViewById(R.id.button1);
    btnStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startService(new Intent(getBaseContext(), Service_class.class));

        }
    });
Run Code Online (Sandbox Code Playgroud)

这是我服务中的onStartCommand方法.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    createNotification();
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)

这是createNotification方法

private void createNotification() {

    NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Intent nintent = new Intent();
    nintent.setClass(this, TestActivity.class);
    PendingIntent pin = PendingIntent.getActivity(getApplicationContext(),
            0, nintent, 0);
    String title = "KR Darsan";
    String body = "This is a notification from darsh";
    Notification n …
Run Code Online (Sandbox Code Playgroud)

service notifications android android-pendingintent

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

两个有不同附加功能的活动通知

我需要创建2个通知,但如果我使用FLAG_UPDATE_CURRENT或FLAG_CANCEL_CURRENT,那么它们都会获得相同的额外通知,否则为第一个.

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

for(int num=1;num<3;num++){
    Intent intent = new Intent(this, ActivityNotification.class); 
    intent .putExtra("reminder_id", num);
    PendingIntent pi = PendingIntent.getActivity(this, num, intent , 0);
    // PendingIntent pi = PendingIntent.getActivity(this, num, intent , PendingIntent.FLAG_UPDATE_CURRENT);
    Notification noti = new Notification.Builder(this)
        .setContentIntent(pi)
        .setContentTitle(title)
        .setContentText(text)
        .setSmallIcon(R.drawable.noti)
        .setWhen(when)
        .setAutoCancel(true)
        .build();
    noti.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(num, noti);          
}
Run Code Online (Sandbox Code Playgroud)

我怎么能有不同的额外内容?或者一般来说,我的ActivityNotification如何知道哪个通知称为它?

android android-notifications android-pendingintent

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

点击意图的小工具没有看到

我已经构建了一个带有imageview的小部件.我想当用户点击imageview时,将启动一个活动.该活动从intent(字符串,整数)中获取额外内容.它几乎可以工作,但是当小部件更新时,旧的附加内容是获取,而不是AppWidgetProvider中给出的新附加内容.我怎么解决这个问题?

先谢谢,西蒙

的AppWidgetProvider:

package com.aquariumzoekenpro.android;

import java.io.InputStream;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import com.aquariumzoekenpro.android.VissenDB.Vis;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.widget.RemoteViews;

public class Widget extends AppWidgetProvider {
    public static final String PREFS_NAME = "Vissen";
    static SharedPreferences sharedPreferences;
    PendingIntent pendingintent;
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){       
//      final int N = appWidgetIds.length;

            sharedPreferences = context.getSharedPreferences(PREFS_NAME, 0);            
            int rbitem = sharedPreferences.getInt("RBitem", 0);
// …
Run Code Online (Sandbox Code Playgroud)

android android-widget android-intent android-pendingintent

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

警报不会唤醒我的服务

我有以下代码,我希望无论手机的状态如何,此警报都会调用我的服务.即使它处于睡眠模式,我也需要它来访问互联网并进行一些网络呼叫.

为什么手机处于睡眠模式时不起作用?

报警管理器

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 5);
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        Intent notifyintent = new Intent(this, OnAlarmReceiver.class);
        notifyintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        notifyintent.setAction("android.intent.action.NOTIFY");
        PendingIntent notifysender = PendingIntent.getBroadcast(this, 0, notifyintent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 20 * 1000,
                notifysender);
Run Code Online (Sandbox Code Playgroud)

AlarmReceiver

public class OnAlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // PullPendingRequests.acquireStaticLock(context)
        context.startService(new Intent(context, PullPendingRequests.class));
    }
}
Run Code Online (Sandbox Code Playgroud)

PullPendingRequests,PendingIntent

public class PullPendingRequests extends IntentService 

public PullPendingRequests() {
        super("PullPendingRequests");
        me = this ;
    }

@Override
    final protected void onHandleIntent(Intent intent) {

        Location …
Run Code Online (Sandbox Code Playgroud)

android android-alarms android-pendingintent

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

泄漏的意图接收器

这是我发送短信的代码.我已经调用了unregisterReceiver(接收器)方法,但我仍然在logcat中收到此错误.

Intent Receiver leaked that was originally register here. Are you missing to call 
unregisterReciever() ?
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public static void sendSMS(final Context context, final String phoneNumber, final String message) {
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent(
            SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0,
            new Intent(DELIVERED), 0);

    // ---when the SMS has been sent---
     context.registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            context.unregisterReceiver(this);
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                ContentValues …
Run Code Online (Sandbox Code Playgroud)

sms android broadcastreceiver android-pendingintent

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

单击"操作按钮"上的清除通知

我想在用户点击操作按钮时清除通知.我在stackoverflow和谷歌搜索了很多,尝试了很多,但都失败了.所以我想知道,如果有任何解决方案如何解决它?

我创建通知的代码:

final int NOTIFICATION_ID = 1;
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.drawable.ic_info_black_24dp);
builder.setStyle(new NotificationCompat.BigTextStyle().bigText("Geschiedenis \nFrans \nDuits \nNatuurkunde \nWiskunde"));
builder.setContentTitle("Rooster: ");
builder.setOngoing(true);
builder.setAutoCancel(true);
builder.setDefaults(Notification.DEFAULT_ALL);
builder.setAutoCancel(true);
Intent showIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, showIntent, 0);
builder.addAction(android.R.drawable.ic_menu_close_clear_cancel, "Sluiten",  contentIntent);
builder.setContentIntent(contentIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, builder.build());
Run Code Online (Sandbox Code Playgroud)

所以要明确:一旦点击"Sluiten",我想清除(关闭)通知.

notifications android push-notification android-intent android-pendingintent

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

从PendingIntent获取Intent导致SecurityException

我们有一些可以长时间工作的旧代码:

public static Intent getIntent(PendingIntent pendingIntent) {
    Intent intent = null;
    try {
        Method getIntent = PendingIntent.class.getDeclaredMethod("getIntent");
        intent = (Intent) getIntent.invoke(pendingIntent);
    } catch (Exception e) {
        // Log line
    }
    return intent;
}
Run Code Online (Sandbox Code Playgroud)

我们现在收到一个安全异常:

java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at com.company.util.IntentUtils.getIntent(IntentUtils.java:160)
Caused by: java.lang.SecurityException: Permission Denial: getIntentForIntentSender() from pid=28128, uid=10127 requires android.permission.GET_INTENT_SENDER_INTENT
    at android.os.Parcel.readException(Parcel.java:1683)
    at android.os.Parcel.readException(Parcel.java:1636)
    at android.app.ActivityManagerProxy.getIntentForIntentSender(ActivityManagerNative.java:5924)
    at android.app.PendingIntent.getIntent(PendingIntent.java:987)
    ... 17 more
Run Code Online (Sandbox Code Playgroud)

可能与AOSP更改有关:https ://android.googlesource.com/platform/frameworks/base/+/e5ad41b%5E! /

任何帮助的意图将不胜感激。

android android-intent android-pendingintent

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

ActivityTransitionRequest中指定的无效活动

我正在尝试使用ActivityRecognition。但是,当我尝试获取DetectedActivity.TILTING或DetectedActivity.UNKNOWN的过渡更新时,出现错误。对于所有其他活动类型,我都没有问题。

这是我创建ActivityTransitionRequest的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = new Intent(this, ActivityRecognizedService.class);
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);

    Task<Void> task =
            ActivityRecognition.getClient(this).
                    requestActivityTransitionUpdates(createTransitionsRequest(), pendingIntent);

    task.addOnSuccessListener(
            new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void result) {
                    Log.d(TAG, "success");
                    // Handle success
                }
            }
    );

    task.addOnFailureListener(
            new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                    Log.d(TAG, "failure", e);
                    // Handle error
                }
            }
    );

    // ActivityRecognition.getClient(this).requestActivityUpdates(1000L, pendingIntent);
}

private ActivityTransitionRequest createTransitionsRequest() {
    List<ActivityTransition> transitions = new ArrayList<>();

    transitions.add( …
Run Code Online (Sandbox Code Playgroud)

android google-api android-pendingintent activity-recognition android-securityexception

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

活动过渡API无法正常工作

我希望使用新的Activity过渡API,在按照此处的教程进行操作后我无法获得所需的结果。

这是我用于设置要检测的活动过渡的代码:

public void setActivityTransitions() {
    transitionList = new ArrayList<>();
    ArrayList<Integer> activities = new ArrayList<>(Arrays.asList(
            DetectedActivity.STILL,
            DetectedActivity.WALKING,
            DetectedActivity.ON_FOOT,
            DetectedActivity.RUNNING,
            DetectedActivity.ON_BICYCLE,
            DetectedActivity.IN_VEHICLE));
    for (int activity :
            activities) {
        transitionList.add(new ActivityTransition.Builder()
                .setActivityType(activity)
                .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER).build());

        transitionList.add(new ActivityTransition.Builder()
                .setActivityType(activity)
                .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT).build());

    }

}
Run Code Online (Sandbox Code Playgroud)

然后请求活动转换更新:

 ActivityTransitionRequest activityTransitionRequest = new ActivityTransitionRequest(transitionList);
        Intent intent = new Intent(context, ActivityDetectorTransitionService.class);
        intent.setAction("com.test.activityrecognition.START_ACTIVITY_TRANSITION_DETECTION_ALARM");
        PendingIntent pendingIntent = PendingIntent.getService(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        Task<Void> task = ActivityRecognition.getClient(context).requestActivityTransitionUpdates(activityTransitionRequest, pendingIntent);
        task.addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void result) {
                System.out.println("onSuccess");
            }
        });
        task.addOnFailureListener(new OnFailureListener() …
Run Code Online (Sandbox Code Playgroud)

android android-pendingintent activity-recognition android-broadcastreceiver activitytransitionapi

2
推荐指数
3
解决办法
1537
查看次数