Java 在android中对挂起的意图实例化非活动类

Java 在android中对挂起的意图实例化非活动类,java,android,Java,Android,我有一个安卓系统的通知,我想做一些类似的事情 MyStaticClass.start()当我在通知中单击时,该类不是活动,它只是实例化所需的类 我怎么做呢 这是我的代码: String notificationContent = "Hay una nueva version disponible"; String notificationTitle = "Firext"; Bitmap largeIcon = BitmapFactory.decodeResourc

我有一个安卓系统的通知,我想做一些类似的事情

MyStaticClass.start()当我在通知中单击时,该类不是活动,它只是实例化所需的类

我怎么做呢

这是我的代码:

String notificationContent = "Hay una nueva version disponible";
        String notificationTitle = "Firext";
        Bitmap largeIcon = BitmapFactory.decodeResource(FirextApplication.getInstance().getResources(), R.drawable.ic_launcher);
        int smalIcon = R.drawable.ic_launcher;

        Intent intent = new Intent(FirextApplication.getInstance(), UpdateProcess.class);
        intent.setData(Uri.parse("content://" + Calendar.getInstance().getTimeInMillis()));
        PendingIntent pendingIntent = PendingIntent.getActivity(FirextApplication.getInstance(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

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

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                FirextApplication.getInstance())
                .setWhen(Calendar.getInstance().getTimeInMillis())
                .setContentText(notificationContent)
                .setContentTitle(notificationTitle)
                .setSmallIcon(smalIcon)
                .setAutoCancel(true)
                .setTicker(notificationTitle)
                .setLargeIcon(largeIcon)
                .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND)
                .setContentIntent(pendingIntent);

        Notification notification = notificationBuilder.build();
        notificationManager.notify((int) Calendar.getInstance().getTimeInMillis(), notification);
还有我要打电话给的班级

public class UpdateProcess {

    private static final String APPLICATION_VND_ANDROID_PACKAGE_ARCHIVE = "application/vnd.android.package-archive";
    private static final String NEWVERSION = "NewVersion.apk";
    private static final File EX = Environment.getExternalStorageDirectory();

    private static volatile UpdateProcess instance = null;
    private Activity activity;


    private UpdateProcess(Activity activity) {
        this.activity = activity;
        checkForNewUpdates();
    }

    public static void startUpdate(Activity activity) {
        if (instance == null) {
            synchronized (UpdateProcess.class) {
                if (instance == null) {
                    instance = new UpdateProcess(activity);
                }
            }
        } else {
            UpdateProcess.instance.activity = activity;
        }
    }
我只需要做一个UpdateProcess.startUpdate()

编辑:

这是我的新代码:

private void showNot() {
        String notificationContent = "Hay una nueva version disponible";
        String notificationTitle = "Firext";
        Bitmap largeIcon = BitmapFactory.decodeResource(FirextApplication.getInstance().getResources(), R.drawable.ic_launcher);
        int smalIcon = R.drawable.ic_launcher;

        Intent intent = new Intent(FirextApplication.getInstance(), UpdateProcess.class);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

        Notification notificationBuilder = new NotificationCompat.Builder(context)
                .setWhen(Calendar.getInstance().getTimeInMillis())
                .setContentText(notificationContent)
                .setContentTitle(notificationTitle)
                .setSmallIcon(smalIcon)
                .setTicker(notificationTitle)
                .setLargeIcon(largeIcon)
                .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND)
                //.setContentIntent(pendingIntent)
                .addAction(android.R.drawable.arrow_up_float, "Call", pendingIntent).build();


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

        notificationManager.notify(0, notificationBuilder);
    }

public class UpdateProcess extends IntentService {

    private static final String APPLICATION_VND_ANDROID_PACKAGE_ARCHIVE = "application/vnd.android.package-archive";
    private static final String NEWVERSION = "NewVersion.apk";
    private static final File EX = Environment.getExternalStorageDirectory();

    private static volatile UpdateProcess instance = null;
    private Context context;

    private UpdateProcess(Context context) {
        super("UpdateProcess");
        this.context = context;
        checkForNewUpdates();
    }

  @Override
    protected void onHandleIntent(Intent intent) {
        startUpdate(getApplicationContext());
    }
但当我点击时,什么也没发生。我得到了这个错误:

05-1017:15:22.955753-7617/?W/活动管理器﹕ 无法启动服务意图{flg=0x10000000 cmp=com.firext.android/.util.UpdateProcess bnds=[192346][1080490]}U=0:未找到

编辑2。现在可以工作了,我忘记了在清单中包含服务,而是在挂起的意图中使用getActivity()和getService()。创建一个临时意图服务,以调用onHandleIntent()中的UpdateProcess.startUpdate()。在这种情况下,您当然不能使用活动作为参数,但是您可以在上下文中更改参数


我需要在UpdateProcess内的方法中显示toast消息,我应该使用什么

您的
通知
可以通过其
挂起内容
触发
活动
服务
、或
广播接收器
<代码>活动是一个
上下文
<代码>服务是一个
上下文
BroadcastReceiver
接收一个
上下文
作为
onReceive()
的参数。因此,从这三个位置,您已经有了一个
上下文
,所以请使用该上下文

你也可以考虑完全摆脱<代码> toAST<代码>。

Toast
仅适用于用户不需要的消息,因为用户可能看不到它

我只需要做一个UpdateProcess.startUpdate()

看来
checkForNewUpdates()
会做一些重要的工作

如果这项工作需要不到15秒的时间,请将
UpdateProcess
转换为
UpdateIntentService
,扩展
IntentService
,并在
onHandleIntent()中执行
检查新更新()
工作。您可以使用
getService()
pendingent
来触发
UpdateIntentService
执行其工作


如果工作可能需要更长的时间,你应该考虑使用(或者也许),以确保设备保持足够长的清醒时间以完成工作。< /P>不要在静态数据成员中放置<代码>活动<代码>。您正在泄漏内存。我需要在UpdateProcess中的方法中显示toast消息,我应该使用什么?仅上下文、ApplicationContext、basecontext。。?我不确定。我将更新我的类到IntentService并删除活动字段,谢谢@colymore:你注释掉了你使用的

pendingent
。这样做没有//结果相同..不要开始..我添加了一个带有pendingent的操作,但是任何人works@colymore:查看LogCat以查看是否有投诉,例如缺少
元素。