Articles of android intent

关于Android中自定义权限的几个问题

我正在学习Android编程,我有点理解自定义权限的概念。 根据我的理解,这是自定义权限的工作原理: ‘Base app’可以通过声明自定义权限(即使用清单文件中的标记)和调用受自定义权限保护的活动和服务的’client app’ ‘Base app’来保护其某些组件(例如,活动和服务)需要获取必要的权限(即,使用清单文件中的标签)来调用base app中的这些组件。 但是,我有关于自定义权限的这些问题: 如果自定义权限被声明为危险(即android:protectionLevel=”dangerous” ), client app需要在安装期间获得用户的批准? 如果是这样,用户如何知道这些自定义权限,因为没有任何自定义权限的文档。 在安装期间, client app如何知道base app已安装在用户的手机中? 无论如何, client app是否知道此信息? 安装client app程序后,如果用户决定删除base app程序,会发生什么? 在这种情况下,如果用户尝试使用client app是否会导致任何安全性exception? 我不知道这些问题是否有意义,但它让我想知道自定义权限在实际场景中是如何实际工作的。 谢谢。

从Android Intent打开图库应用程序

我正在寻找一种从意图中打开Android图库应用程序的方法。 我不想返回图片,而只是打开图库以允许用户使用它,就像他们从启动器中选择它一样( View pictures/folders )。 我试图做以下事情: Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_GET_CONTENT); intent.setType(“image/*”); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 但是,这会导致应用程序在我选择图片后关闭(我知道这是因为ACTION_GET_CONTENT ),但我需要打开图库。 任何帮助都会很棒。 谢谢

找不到处理意图action.dial的活动

我正试图让我的应用程序从EditText调用一个数字,但我得到: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.DIAL dat=Ring Tel nr. 123456789 } 我已经搜索了一段时间以获得答案,但大多数答案都是权限并向Manifest添加活动。 如果我做错了,我已经做了两件事。 我在手机上运行它,而不是模拟器。 无论是否使用了intent-filters,我都尝试过。 以下是代码:Manifest: 拨打电话的按钮(从SharedPrefs获取电话号码到下面的a1 🙂 knapp_ring.setOnClickListener(new View.OnClickListener() { Intent call = new Intent(Intent.ACTION_DIAL); @Override public void onClick(View v){ call.setData(Uri.parse(“Telnr:” + a1)); startActivity(call); } });

使用提供的位置和标记启动Google Maps App

从我的应用程序,我想启动谷歌地图应用程序与提供的位置和标记。 标记应指示该给定位置上存在某些内容。 现在,我有以下代码,它以一个Intent和一个提供位置的Google Maps App开始(51.49234,7.43045)。 startActivity( new Intent( android.content.Intent.ACTION_VIEW, Uri.parse(“geo:51.49234,7.43045”))); Google地图应用启动时,它看起来如下所示: 没有显示标记。 我想,谷歌地图应用程序会在该位置显示一个标记,通过意图给出。 是否有任何“隐藏的”Intent URI可用于在Google Maps App中显示标记? 提前致谢。 解 @Rajiv M.向我指出了用给定位置查询周围环境的想法。 因此,解决方案是:使用给定位置作为参数查询给定位置的周围环境。 URI看起来像: geo:51.49234,7.43045?q=51.49234,7.43045 Google地图会将查询结果显示为街道名称: 有点黑客,但似乎运作良好。 为什么不应该使用0,0作为地图位置 geo:0,0?q=51.49234,7.43045 当您使用提供的地图位置点0,0启动Google地图应用时,Google地图应用将开始搜索您当前的设备位置。 这需要时间。 在某些情况下,当没有提供GPS信号时,太多了。 在此之前,Google Maps App将开始搜索您的查询51.49234,7.43045。

Android 4.1 / 4.3 / 4.4电子邮件应用程序中的FileProvider失败,列’_data’不存在

我有一个FileProvider ,我将SD卡上的文件附加到电子邮件时使用。 这适用于使用Intent任何应用中的Lollipop和Marshmallow 。 但是,在Android 4.3使用Email应用程序时,附件会在撰写时显示在电子邮件中,但是当它发送时,在收件人端,附件不存在。 对于所有其他经过测试的应用程序(Gmail,Evernote,Drive)。 我没有在发送电子邮件之前删除该文件。 这是我的代码。 final Intent fileShareIntent = new Intent(android.content.Intent.ACTION_SEND); fileShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, emailSubject); fileShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailText); Uri fileUri = STFileProvider.getContentUriForProvidedFile(this,file); fileShareIntent.putExtra(Intent.EXTRA_STREAM,fileUri); fileShareIntent.setType(mimeType); fileShareIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{prefs.getString(“default_email_preference”, “”)}); startActivity(Intent.createChooser(fileShareIntent,getString(R.string.share_with))); 编辑我find了一个Exception的堆栈跟踪,它符合@ CommonsWare的建议 01-04 17:39:00.430 6828-6828/? W/System.err: java.lang.IllegalArgumentException: column ‘_data’ does not exist 01-04 17:39:00.430 6828-6828/? W/System.err: at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303) 01-04 17:39:00.430 6828-6828/? W/System.err: at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78) 01-04 […]

onNewIntent未被调用

我的情况很奇怪。 有一个应用程序,我决定从第一个应用程序的代码创建另一个。 我复制了.xml文件,复制了.java文件,以便一切正常。 但是有一个巨大的问题:我在第一个项目中调用了onNewIntent(Intent intent)方法,但是在第二个项目中没有调用它(代码是相同的!) 方法,可以触发,但现在无法触发 public void onClick(View arg0) { Intent browserInt = new Intent (Intent.ACTION_VIEW, Uri.parse(“https://oauth.yandex.ru/authorize?response_type=token&client_id=zzzzz”)); browserInt.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(browserInt); } 这是onNewIntent()方法: @Override protected void onNewIntent(Intent intent){ System.out.println(” I WORKED!”); Uri uri = intent.getData(); if (uri!=null) { String m = uri.toString().split(“#”)[1]; String[] args = m.split(“&”); String arg = args[0]; String token = arg.split(“=”)[1]; System.out.println(token); } […]

非常简单的代码,但使用Fragment时出现错误“Activity已被破坏”

我做了一个非常简单的Activity ,它显示了一个简单的ListFragment,如下所示: 我的活动: public class MyActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { FragmentManager fragMgr = getSupportFragmentManager(); FirstFragment list = new FirstFragment(); fragMgr.beginTransaction().add(android.R.id.content, list).commit(); } } 我的ListFragment: public class FirstFragment extends ListFragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.main, null); return view; } @Override public […]

意图开始活动 – 但不要带到前面

描述: 活动A可见(或在后台) 意图我被一个有价值的额外广播接收,然后将附加内容传递给将用于启动活动A的新Intent I2 。 结果: 如果活动在后台,请不要将活动带到前面。 码: Intent I2= new Intent(context, MyActivity.class); I2.putExtra(.. I2.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); // | Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(I2); 注意:我没有添加“android:taskAffinity”来表示..我认为你应该知道

Android:在活动之间传递哈希映射

我在字符串和类对象之间有一个映射。 我在Activity1中填充此地图,我想将其传递给activity2。 public class NEW extends Activity { public class data { String name; float value; …. etc } …… static Map data_map = new HashMap(); ….. }

在android中提升Intent的成本

广播意图需要多少性能? 是否可以每秒广播多次或意图昂贵?