标签: android-intent

得到例外:片段已经激活

我有一个片段 ;

MyFragment myFrag = new MyFragment();
Run Code Online (Sandbox Code Playgroud)

我把bundle数据放到这个片段:

Bundle bundle = new Bundle(); 
bundle.putString("TEST", "test");
myFrag.setArguments(bundle);
Run Code Online (Sandbox Code Playgroud)

然后,我用这个替换旧片段并放在backstack上:

//replace old fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFrag, "MyTag");
//put on backstack
fragmentTransaction.addToBackStack(null);
//commit & get transaction ID
int transId = fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

后来,我使用上面的事务ID()弹出backstacktransId:

//pop the transaction from backstack
fragmentManager.popBackStack(transId,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
Run Code Online (Sandbox Code Playgroud)

后来,我再次将bundle数据作为参数设置到我的fragment(myFrag):

//Got Java.lang.IllegalStateException: fragment already active
myFrag.setArguments(bundle);
Run Code Online (Sandbox Code Playgroud)

如您所见,我的上述代码异常Java.lang.IllegalStateException: fragment already active.虽然我已经从backstack弹出了它的事务,但我不明白为什么 myFrag 仍然有效.无论如何,因为我得到了例外,我认为我别无选择,只能取消激活片段,所以,我做了:

Fragment activeFragment = fragMgr.findFragmentByTag("MyTag");
fragmentTransaction.remove(activeFragment); …
Run Code Online (Sandbox Code Playgroud)

android android-emulator android-intent android-layout android-fragments

58
推荐指数
2
解决办法
4万
查看次数

从Picasa // Google +同步文件夹中获取图库中的图像不起作用

我正在尝试从Google+同步照片中的某个文件夹中获取图库应用中的图片.选择图像后,Uri正在正确传回.但是当我试图在存储设备上获取该图像的实际路径时,我可以使用它,它会崩溃.问题似乎与picasa内容提供商有关.

在Nexus S和Nexus 7以及其他设备上进行了测试.

E/AndroidRuntime(14572): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.google.android.gallery3d.provider/picasa/item/5427003652908228690 }}

这里,dat字段似乎正确地传递了Uri,但是当我尝试获取图像的位置时,它崩溃时出现以下错误.

W/GalleryProvider(14381): unsupported column: _data

似乎Picasa相册的内容提供商没有_data字段.

获取位置的代码是:

// imageUri is the Uri from above.
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(imageUri, proj,null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();

String filePath = cursor.getString(column_index);
cursor.close();

此图片似乎唯一支持的列包括:[user_account,picasa_id,_display_name,_size,mime_type,datetaken,纬度,经度,方向]

我们如何获得此图像的实际位置.如果我们不应该使用此图像,则不应首先向用户显示这些图像.

启动图库应用程序的意图是:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);

android android-intent android-contentprovider

58
推荐指数
3
解决办法
2万
查看次数

New Intent()用Android启动新实例:launchMode ="singleTop"

我的活动Aandroid:launchMode="singleTop"在清单.

如果我去的活动B,CD在那里我有菜单快捷方式回到我的应用程序根系活力(A).

代码如下所示:

Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

但是,不是返回到A我已经存在的实例,MainActivity.class而是创建一个新实例 - >它onCreate()转而不是onNewIntent().

这不是预期的行为,对吗?

android android-intent android-activity

57
推荐指数
4
解决办法
12万
查看次数

什么是Android中的intent-filters?

在我的Android应用程序中,我想从最初的活动'A'开始一个活动'B'.我已经为这两个创建了类.但是,当使用以下代码启动B时,我收到运行时错误:application has stopped unexpectedly, try again.这是我的代码:

Intent myIntent = new Intent(this, AddNewActivity.class);
startActivity(myIntent); 
Run Code Online (Sandbox Code Playgroud)

当我AndroidManifest.xml/manifest/application/activity/intent-filers为活动B 添加新条目时,应用程序工作.

我有两个问题:

  • 当有多个活动条目时AndroidManifest.xml,android如何知道首先启动哪个活动?
  • 我无法理解意图过滤器.任何人都可以解释.

这是我的偏爱 AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".ListAllActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".AddNewActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

android intentfilter android-intent

57
推荐指数
2
解决办法
10万
查看次数

Android重写onBackPressed()

是否可以仅为一个活动覆盖onBackPressed()?

在后退按钮上单击我想调用特定活动的对话框,但在所有其他活动中,我希望它在之前工作(转到上一个活动)...

谢谢你的提前.

EDITED

谢谢你们所有的人,我已经拥有了你告诉我的所有内容,但我的问题是,当我点击另一个活动上的后退按钮时,我会去我之前的活动(那里我有后退按钮Overriden)和我认为它不起作用,我认为它在整个应用程序中覆盖onBackPressed(),现在我得到了它:D

android overriding event-handling android-intent

57
推荐指数
4
解决办法
16万
查看次数

Intent.FLAG_ACTIVITY_CLEAR_TASK与Intent.FLAG_ACTIVITY_TASK_ON_HOME之间的区别

从Android文档:

FLAG_ACTIVITY_CLEAR_TASK

如果在传递给Context.startActivity()的Intent中设置,则此标志将导致在活动开始之前清除与活动关联的任何现有任务.也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成.这只能与FLAG_ACTIVITY_NEW_TASK一起使用.

FLAG_ACTIVITY_TASK_ON_HOME

如果在传递给Context.startActivity()的Intent中设置,则此标志将使新启动的任务置于当前主活动任务(如果有)之上.也就是说,从任务中退回将始终将用户返回到主页,即使这不是他们看到的最后一个活动.这只能与FLAG_ACTIVITY_NEW_TASK一起使用.

考虑这两个片段:

Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我理解的方式,在任何代码片段,我们创造它只有在活动是一项新的任务,而当你按下回你到主屏幕.假设我可能弄错了,两者之间有什么区别?另外,如果我有另一个片段,Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK它会如何表现?

android android-intent

56
推荐指数
1
解决办法
4万
查看次数

Google In-App结算,IllegalArgumentException:升级到Android L Dev预览后,服务意图必须明确

我的应用内结算代码工作正常,直到我升级到Android L Dev Preview.现在,当我的应用程序启动时出现此错误.有没有人知道L导致了什么变化或者我应该如何更改我的代码来解决这个问题?

android {
compileSdkVersion 'android-L'
buildToolsVersion '20'
defaultConfig {
    minSdkVersion 13
    targetSdkVersion 'L'
...
...


compile 'com.google.android.gms:play-services:5.+'
compile 'com.android.support:support-v13:21.+'
compile 'com.android.support:appcompat-v7:21.+'
...
...
Run Code Online (Sandbox Code Playgroud)

应用启动时的错误:

06-29 16:22:33.281    5719-5719/com.tbse.wnswfree D/AndroidRuntime? Shutting down VM
06-29 16:22:33.284    5719-5719/com.tbse.wnswfree E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.tbse.wnswfree, PID: 5719
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tbse.wnswfree/com.tbse.wnswfree.InfoPanel}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.billing.InAppBillingService.BIND }
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2317)
        at android.app.ActivityThread.access$800(ActivityThread.java:143)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5070)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372) …
Run Code Online (Sandbox Code Playgroud)

android illegalargumentexception android-intent in-app-billing android-5.0-lollipop

56
推荐指数
3
解决办法
3万
查看次数

Intent.resolveActivity 在 API 30 中返回 null

查看intent.resolveActivity != null 但启动 Intent 会引发 ActivityNotFound 异常,我在打开浏览器或具有深度链接的应用程序时写道:

private fun openUrl(url: String) {
    val intent = Intent().apply {
        action = Intent.ACTION_VIEW
        data = Uri.parse(url)
//        setDataAndType(Uri.parse(url), "text/html")
//        component = ComponentName("com.android.browser", "com.android.browser.BrowserActivity")
//        flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_GRANT_READ_URI_PERMISSION
    }
    val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
    if (activityInfo?.exported == true) {
        startActivity(intent)
    } else {
        Toast.makeText(
            this,
            "No application can handle the link",
            Toast.LENGTH_SHORT
        ).show()
    }
}
Run Code Online (Sandbox Code Playgroud)

它不起作用。在 API 30 模拟器中找不到浏览器,而一个常见的解决方案有效:

private fun openUrl(url: String) {
    val intent …
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-intent activitynotfoundexception android-11

56
推荐指数
5
解决办法
2万
查看次数

根据安装的Android软件包名称自定义过滤意图选择器

我想利用内置的意图选择器来显示自定义过滤的应用列表,供用户选择和启动.

我知道如何获取已安装的软件包列表:

final Intent myIntent = new Intent(android.content.Intent.ACTION_MAIN);  
List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(myIntent, 0);
Run Code Online (Sandbox Code Playgroud)

此时,我想根据包名称中包含的特定字符串(或字符串的变体)过滤列表,我也可以弄清楚如何操作.

但是这里我被卡住了.据我所知,Intent.createChooser()只需要一个目标Intent作为参数.我希望有一个重载基于包和类名或其他东西的意图列表.但我没有看到类似的东西.我在某处错过了吗?

所以问题是,这可能与内置选择器有关,还是我必须使用AlertDialog Builder构建自己的选择器?我希望避免后者.

提前致谢.

android android-intent

55
推荐指数
4
解决办法
5万
查看次数

intent.setType(type)可能的intent类型是什么?

我正在搜索如何从我的应用程序发送电子邮件,我遇到了这个主题:

如何从我的Android应用程序发送电子邮件

它解决了在他的动作发送中添加类型的问题:

i.setType("message/rfc822");
Run Code Online (Sandbox Code Playgroud)

这对我也有用,我可以发送我的电子邮件,这很棒.我只是想知道我还能在那里设置什么.

我知道,如果我没有设置任何内容,它将显示包含所有可用选项的列表.我想强制用户使用我选择的任何选项来共享它.我可以探索这个以迫使用户以我想要的方式分享吗?

android android-intent

55
推荐指数
2
解决办法
7万
查看次数