Articles of android intent

如何让服务在后台运行

我创建的应用程序会在用户按下电源按钮3次后立即启动活动。 经过一些研究后我发现要做到这一点,首先你需要创建一个服务,启动广播接收器来检查屏幕的开/关状态。 基本上我希望即使应用程序关闭也能运行。 一旦按下电源按钮3次或更多次,它应该开始另一个活动。 如果您知道解决方案,请给我完整的代码或答案的链接。 我以某种方式设法编写此代码,但它无法正常工作: UpdateService.java 这是我使用的服务类: import android.app.Service; import android.content.BroadcastReceiver; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.util.Log; import android.widget.Toast; public class UpdateService extends Service { BroadcastReceiver mReceiver; @Override public void onCreate() { super.onCreate(); // register receiver that handles screen on and screen off logic IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); mReceiver = […]

通过intent将对象作为Parcel(带有文件描述符)发送会导致exception

我正在尝试将一组StatusBarNotifications发送给我的另一个服务,所以我这样做了: 扩展NotificationListenerService服务: @Override public void onNotificationPosted(StatusBarNotification sbn) { // TODO Auto-generated method stub StatusBarNotification[] activeN = super.getActiveNotifications(); Intent i = new Intent(this, CoreTwo.class); i.putExtra(“activenotifications”, activeN); startService(i); } 但是我得到了一个关于文件描述符的RuntimeException。 我只find了一些解决这个问题的链接,例如这个问题。 答案提到了以下内容: 使用Bundle.putBinder()传递一个Binder,它将使用ParcelFileDescriptor(来自API 18)返回一个Parcel。 但我不明白如何实现这一点。 此链接中的另一个人在这里提到以下内容: 如果我从ContentProvider返回PaecelFileDescriptor,它可以正常工作。 但我不明白他的意思。 这是最后一个链接。 它解决了与我相同的问题,但似乎没有解决方案。 有谁理解我链接的这些潜在解决方案? 是否有针对此问题的解决方法,可能是另一种发送数据的方式(StatusBarNotification [](它扩展了Parcelable))? 这是日志: 08-23 16:49:36.839: W/NotificationListenerService[NoLiSe](12804): Error running onNotificationPosted 08-23 16:49:36.839: W/NotificationListenerService[NoLiSe](12804): java.lang.RuntimeException: Not allowed to […]

如何在android中的instagram上添加带图像共享的标题?

这是我的代码。 我想添加图片标题。 请帮帮我。 private void shareInstagram(Uri uri){ Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType(“image/*”); // set mime type shareIntent.putExtra(Intent.EXTRA_STREAM,uri); // set uri shareIntent.putExtra(Intent.EXTRA_TITLE, “Sample title”); shareIntent.setPackage(“com.instagram.android”); startActivity(shareIntent); }

如何在Android中findIntent源?

可能重复: Android:如何获取Intent的发件人? 在android中有没有办法find触发INTENT的源活动(在目标活动中)? 场景是我有两个活动A和B.两者都激活了调用活动的意图C.活动C根据其来源显示额外信息。 例如。 如果呼叫来自A,则C仅显示2个文本视图,而在B触发的意图的情况下,活动C显示3个文本视图(基本上更多信息基于谁是呼叫者)。 为了确定这一点,我需要知道是谁解雇了调用C的意图 。 我该怎么做呢?

具有自己日历的Android同步日历function

我已经展示了如何为我们自己的帐户设置自己的sync_calendarfunction的技术,以及我们如何将自己的事件同步到…. 将清单中的权限授予READ和WRITE日历 在res / xml文件夹文件名下创建SyncAdapter:sync_calendar.xml android:accountType: – 这里提供您在帐户身份validation器下创建的帐户types,如下所述 在清单文件中定义服务名称和元数据 创建同步启动时将调用的服务,并添加要移交同步日历的逻辑 public class CalendarSyncAdapterService extends Service { private static SyncAdapterImpl sSyncAdapter = null; static MeetingsDatabaseAdapter sync_Meetings = null; public CalendarSyncAdapterService() { super(); } private static class SyncAdapterImpl extends AbstractThreadedSyncAdapter { public SyncAdapterImpl(Context context) { super(context, true); mContext = context; } @Override public void onPerformSync(Account account, Bundle […]

FLAG_ACTIVITY_REORDER_TO_TOP导致RuntimeException或黑屏旋转

我有两个活动,我想在它们之间切换而不重新创建或复制它们。 每个活动都有一个按钮,该按钮将使用FLAG_ACTIVITY_REORDER_TO_TOP的意图将用户发送给另一个。 除以下条件外,此方法效果很好: 关闭力量后启动应用程序新鲜 点击按钮进入活动2 点击按钮返回活动1 旋转屏幕。 此时,应用程序崩溃,“执行停止未恢复的活动”。 棒棒糖只是显示黑屏。 奇怪的是,如果你在第4步之前进入主屏幕并恢复应用程序,然后旋转上述条件没有任何问题,应用程序正常工作,直到它关闭/重新启动。 这种情况似乎特定于FLAG_ACTIVITY_REORDER_TO_TOP,并且发生在Android 5.0和4.4上,并且只是重新开始。 我对清单中的活动没有任何属性。 布局只有一个按钮,调用如下所示的方法: MainActivity: public void goSecond(View v) { Intent i = new Intent(this, SecondActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i); } SecondActivity: public void goFirst(View v) { Intent i = new Intent(this, MainActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i); } 我没有覆盖任何其他生命周期方法或做任何其他事情。 有任何想法吗?

Theme.NoDisplay创造了延迟

使用Theme.NoDisplay主题时出现了一个奇怪的错误:显示另一个活动非常慢! 我从通知中打开一个不可见的活动,该通知依次根据意图操作打开一个新活动。 如果我使用任何其他主题,如Theme.AppCompat ,那么打开输入对话框需要大约300ms。 使用Theme.NoDisplay主题,大约需要5秒钟! 如果我使用logcat,那么我可以看到InputActivity中的onCreate , onResume等在创建不可见活动后几毫秒被调用,但是直到它实际可见,它需要几秒钟。 我不明白该主题如何创建该效果或如何解决它(不使用服务)。 无形的活动: 要开放的活动: 通知的意图: Intent stopIntent = new Intent(context, InvisibleActivity.class); stopIntent.setAction(InvisibleActivity.STOP_TIMER); stopIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pStopIntent = PendingIntent.getActivity(context, 0, stopIntent, 0); 在InvisibleActivity中的onCreate中,这称为: Intent i = new Intent(getApplicationContext(), InputActivity.class); startActivity(i);

Android日历:onActivityResult的resultCode始终为0

我开发了一个Android应用程序,它提示日历应用程序编辑事件。 我使用startActivityForResult()打开日历。 编辑并保存事件后, resultCode onActivityResult() resultCode始终为0。 我看到许多与“onActivityResult resultCode总是返回0”相关的答案。 这是因为在第二个活动中没有使用setResult()和finish() 。 但就我而言,我正在调用Android日历应用程序(不是自定义活动)。 提示Android日历的代码: Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType(“vnd.android.cursor.item/event”); //set the event details startActivityForResult(intent,1); 在保存或取消日历时触发 protected void onActivityResult(int requestCode, int resultCode, Intent data) { //resultCode always returns 0. switch(requestCode) { case 1: if (resultCode == Activity.RESULT_OK) { } } } 无论我在日历应用程序中单击“保存”还是“取消”, resultCode始终为0。 另外我需要从日历intent中获取数据。但是onActivityResult中的intent“data”也返回null。 有谁能解释为什么会这样? 有没有办法知道用户是否点击“保存”或“取消”?

Android IntentCompat makeRestartActivity在2.3中没有任何作用

我在清除整个活动堆栈和运行新活动时遇到问题。 在我的应用程序中,用户可以导航到其配置文件并关闭其会话。 屏幕堆栈如下: StartActivity(自动完成,因此不会保留在堆栈中)> MainActivity> UserProfileActivity 当用户单击“从配置文件注销”时,它应该打开StartActivity,这将显示注册屏幕。 我们的想法是清除所有活动堆栈,因此用户无法继续注销: UserProfileActivity> StartActivity(并且堆栈中没有任何其他内容) 我尝试了一种基于IntentCompat makeRestartActivity的解决方案,该解决方案应该从启动器图标启动时启动所需的活动。 它在Android 4. +中完美运行,但它在Android 2.3上无效。 代码如下(取自此链接 ): Intent intentToBeNewRoot = new Intent(UserProfileActivity.this, StartActivity.class); ComponentName cn = intentToBeNewRoot.getComponent(); Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); startActivity(mainIntent); 我在这里看到了另一种解决方案,基本上用一些标志创建一个intent: Intent intent = new Intent(getApplicationContext(), StartActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); finish(); 这似乎有效,但是在按下StartActivity之后,它又返回到MainActivity(存在于堆栈中),如果没有登录,它应该是不可用的。 那么,有没有办法清除整个活动堆栈,适用于所有Android版本?

使用intent从我的Android应用程序打开LinkedIn应用程序(联系人资料页面)?

我尝试从我自己的应用程序打开LinkedIn Android应用程序(配置文件屏幕)。 我发现可以使用: intent.setData(Uri.parse(“linkedin://profile/”+profileId)); 其中profileId ,它的数字是这样的: 190485666 但我不知道profileId是否有必要的格式,因为当我发送请求获取联系人列表时: http://api.linkedin.com/v1/people/~/connections:(id,first-name,last-name,public-profile-url,picture-url) 我以下一种格式获取profileId : UVIQw3UQqZ 如何使用Android intent从我的LinkedIn联系人列表中打开用户的个人资料屏幕? 或者如何以数字格式获取profileId?