我有以下广播接收器,当手机启动时被调用(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
我有两个活动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) 我需要创建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如何知道哪个通知称为它?
我已经构建了一个带有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) 我有以下代码,我希望无论手机的状态如何,此警报都会调用我的服务.即使它处于睡眠模式,我也需要它来访问互联网并进行一些网络呼叫.
为什么手机处于睡眠模式时不起作用?
报警管理器
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) 这是我发送短信的代码.我已经调用了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) 我想在用户点击操作按钮时清除通知.我在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
我们有一些可以长时间工作的旧代码:
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! /
任何帮助的意图将不胜感激。
我正在尝试使用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
我希望使用新的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