Articles of android intent

检查Intent.ACTION_VIEW上的用户操作

我有一个列表视图填充了一些文件,可以有各种types,如PDF或文档。当用户点击一个我得到的文件MIMEtypes,并启动一个意图,让用户select使用哪个应用程序来打开该文件。我想知道的是用户select了什么东西,或者只是简单地按下而没有select任何东西。 我现在尝试的直到现在正在做一个startActivityForResult并检查成功,但它总是返回RESULT_CANCELED static final int SELECTED_VIEWER = 1; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(filePath), mimetype); try { startActivityForResult(intent, SELECTED_VIEWER); }catch (ActivityNotFoundException e) { Toast.makeText(getActivity(), Strings.ERROR_NO_VIEWER, Toast.LENGTH_SHORT).show(); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SELECTED_VIEWER) { if (resultCode == Activity.RESULT_CANCELED ) { //do something } } } 我甚至尝试了一个startActivityForResult(Intent.createChooser,但仍然无济于事。我怎么知道用户是否在列表中select了某个东西,或者他是否取消了这个打开?

我怎样才能找出一个服务(不是在我的应用程序)是从哪个意图开始的?

我想知道Google地图服务是如何自动启动的。 当我转储主缓冲区或事件缓冲区的logcat时,我只能找出Google Maps的哪个组件已经启动,但没有关于“谁” (包)启动它的线索,以及“如何” (意图)? 有没有可以用来找出它们的debugging方法?

短信接收机的“真实”testing

我有一个SmsReceiver ,我想要在设备上进行真实testing,但是我不愿意将一堆真正的短信发送到我的设备上,这些设备会叠加我的手机账单;-) 所以我认为我必须能够采取行动RECEIVED_SMS ,短信数据和所有其他的东西需要发送短信的intent 。 谷歌快速浏览后,我结束了这里: http : //blog.dev001.net/post/14085892020/android-generate-incoming-sms-from-within-your-app 。 我从这个post了一些想法,并创造了我的杀手机器人应用程序创build和“发送”短信在设备上的testing目的,我必须说,它的工作就像一个魅力,除了我的接收器onReceive没有被调用,发送短信直接进入收件箱。 我知道我的接收器工作,如果我发送一个真正的短信到我的设备触发,如果我从DDMS发送短信到模拟器,它也触发,所以应该没事的。 那么是否有任何permissions ,一些Intent.putExtras或其他我想念的东西? 任何提示是真正有用的,如果可以得到这个工作,这将帮助我在testing和开发我的应用程序很多。 我在清单中的接收者: <receiver android:name=".SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> 清单中的权限(接收申请): <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> 清单中的权限(发送应用程序): <uses-permission android:name="android.permission.BROADCAST_SMS"/> 还应该提到在LogCat或控制台中没有显示错误。

如何与Gmail客户端共享内部存储文件

我试图通过我的Moto Razr上的Gmail客户端共享我的内部存储文件,但是每次我发送到我的testingGmail帐户,我都得到了除附件外的所有内容。 这是我如何调用和启动Gmail,而添加文件作为附件。 private void saveDaily() { Intent intent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, new String[] { loadEmailAddress() }); intent.putExtra(Intent.EXTRA_SUBJECT, "Daily"); intent.putExtra(Intent.EXTRA_TEXT, "Daily Log"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); ArrayList<Uri> uris = new ArrayList<Uri>(); uris.add(saveDaily2File("dailyRecord.txt")); Log.d(TAG_D, "Size: " + uris.size()); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); startActivity(Intent.createChooser(intent, "Send email")); } 这是我如何实现我的定制内容提供者。 public class SavedFileProvider extends ContentProvider { private static final String TAG_D = […]

即使设置了最高优先级并安装了第一个,也不会得到短信

Go SMS安装后,我的应用程序不会收到短信。 我设置了最高优先级,并尝试在安装Go SMS应用程序之前安装我的应用程序。 但是,Go SMS在我之前总是得到SMS。 (第一个应用程序安装的概念不适用于我的手机。) 我很好奇Go的开发人员在做什么。 他们的应用程序如何在我之前总是拦截SMS? 我的应用程序工作正常,没有Go SMS。 无论如何,这是我的清单。 也许我做错了什么。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.ansmsreceiver" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.test.ansmsreceiver.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.test.ansmsreceiver.SMSReceiver" > <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.SMS_RECEIVED" […]

如何将数据传递给android市场在chrome上使用新的scheme?

所以我按照这里注意到,你可以在网站上放一个链接,让用户点击它。 如果用户安装了应用程序,则应用程序将启动。 如果应用程序没有安装,Google Play商店将会启动并search特定的软件包,这是一个很棒的function! 但是从我的理解来看,这会松散传递string来玩店的能力。 根据这里 ,你可以有一个像market://details?id=your.package.name&referrer=YourReferrerString的链接market://details?id=your.package.name&referrer=YourReferrerString 。 如果在应用程序中设置了广播接收器,您将能够捕获引用者string,但是如果使用了来自此处的第一个方法,我怎样才能达到相同的目标? 这里是我能find的唯一线索,讨论Chrome上的新function(?),但似乎没有回答我的问题。 谢谢!!

在应用程序购买错误在静态代码

我正在使用当前的代码购买调用购买意向 Bundle buyIntentBundle = mService.getBuyIntent(3, pContext.getPackageName(), "android.test.canceled", "inapp", "bGoa+V7g/yqDXv"); Set<String> allKeys = buyIntentBundle.keySet(); Object responseCode= buyIntentBundle.get("RESPONSE_CODE"); Object intent= buyIntentBundle.get("BUY_INTENT"); Log.i(TAG,"buyIntentBundle"+buyIntentBundle.keySet()+"responseCode"+responseCode+"intent"+intent); PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); if (pendingIntent != null) { pContext.startIntentSenderForResult(pendingIntent.getIntentSender(), 2013, new Intent(), Integer.valueOf(0), Integer.valueOf(0),Integer.valueOf(0)); } 现在我正在检查onActivityResult if (requestCode == 2013) { Log.i(TAG, "onactivity result called inside request code"); int responseCode = intent.getIntExtra("RESPONSE_CODE", 0); String […]

通知带来的应用程序前面没有变化的活动

我想创build一个通知,当它被点击的时候会把我的应用程序放在前面,但是不会改变(重新加载或导出)显示的最后一个活动。 我试过了: setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)) 但是在新的Android 4.3应用程序前面,但它也启动了一个新的MainActivity实例,我不想要这个。 我希望我的应用程序将继续显示的最后一个活动。 怎么做?

使用Intent.ACTION_GET_CONTENTselect多个文件

我想用一个意图select多个文件,但似乎我缺less的东西。 我创build了一个Intent.ACTION_GET_CONTENT意图,把Intent.EXTRA_ALLOW_MULTIPLE作为额外的 (它似乎完全符合目的)并创build一个select器(可选),它select应该能够select多个文件并返回它们的应用程序。 问题是我只能select一个文件。 我尝试了多个文件探索器。 这是API 18(4.3)。 ACTIVITY_CHOOSE_FILE = 1; //global constant Button btn = (Button) this.findViewById(R.id.btnGetFiles); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent chooseFile; Intent intent; chooseFile = new Intent(Intent.ACTION_GET_CONTENT); chooseFile.setType("file/*"); chooseFile.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent = Intent.createChooser(chooseFile, "Choose a file"); startActivityForResult(intent, ACTIVITY_CHOOSE_FILE); } }); 我也将其添加到清单(添加它之前它具有相同的function): <intent-filter> <action android:name="android.intent.action.GET_CONTENT" /> <category android:name="android.intent.category.DEFAULT" /> […]

select一个目录/文件使用Intent.ACTION_CREATE_DOCUMENT(存储访问框架)

如这里所解释的: http://www.doubleencore.com/2014/03/android-external-storage/ 或在这里: http://www.androidpolice.com/2014/02/17/external-blues-google-has-brought-big-changes-to-sd-cards-in-kitkat-and-even-samsung-may-be-实施-他们/ KitKat正在限制写入到次要外部存储到包特定的目录(尽pipe一些开发人员已经find解决方法了…)。 随着三星使用SD卡作为辅助外部存储和推出它的4.4.2更新这已成为许多应用程序的主要问题。 我的应用程序有一个保存function,允许用户select一个任意目录来保存文件。 我使用Intent类似org.openintents.action.PICK_DIRECTORY,com.estrongs.action.PICK_DIRECTORY或我的集成文件浏览器来select一个目录。 用户当然也可以自由selectSD卡上的任何path,但是由于KitKat的新的限制,如果目录是一个我的应用程序没有写访问权限,实际的存储操作失败。 我需要另一种方法来selectKitKat上的目录,以便用户在尝试保存到SD卡时不会收到错误消息。 这可以通过让他们只select应用程序具有写入权限的目录来实现。 我试图像这样使用Intent.ACTION_CREATE_DOCUMENT: Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT) .addCategory(Intent.CATEGORY_OPENABLE) .setType(attachment.getContentType()) .putExtra(Intent.EXTRA_TITLE, attachment.getName()); startActivityForResult(intent, RequestCodes.MSG_CHOOSE_DIRECTORY); 这工作正常,我可以写入用户select的文件,但我只能select某些目录。 例如,对于PDF文件,它将返回下载目录(匹配Environment.DIRECTORY_DOWNLOADS),对于JPG,它将允许我select下载目录和Google驱动器。 但它没有给我select主外部存储上的其他文件夹,也没有在SD卡上的特定于包的目录(我尝试了不同的内容types,如“* / *”或DocumentsContract.Document.MIME_TYPE_DIR,但无济于事)。 所以我在寻找的是一种让用户在主外部文件系统上select一个目录的方法(就像在实际上是内部存储的Environment.getExternalStorageDirectory()所返回的那样)以及框架给我的所有目录到辅助外部存储器中以便将文件保存在该目录中。 无论用户select目录还是文件都不重要,应用程序将使用自己的文件名或用户select的文件名。 或者知道某些应用程序如何find解决新的写入限制的方法当然也是一个可行的select;-)。 ES文件资源pipe理器例如可以写任何文件到SD卡上的任何目录,因为我可以从我自己的testing中确认一个没有根据SD卡的S4。