我有一个付费的应用程序,已经在Android市场上出现了几个月,到目前为止,应用程序没有任何类型的复制保护或许可证验证方案.
我刚刚在我的应用程序中添加了LVL代码的修改版本.为了测试代码的许可响应处理,我在模拟器上登录了我的开发帐户并成功完成了所有测试响应,然后在我的真实手机上做了同样的事情(Droid运行2.2).
我认为在成功测试之后我应该很高兴,但我做了最后一次互联网搜索,看看一旦他们允许他们的LVL实现上线,人们是否有问题.令我恐惧的是,我偶然发现了开发人员的故事说他们已经成功测试了我所做的所有测试响应,但是当他们实际上用LVL上传他们的应用程序时,所有用户都收到回复说他们有未经许可的应用程序版本,当情况并非如此.
话虽如此,成功部署LVL的人能告诉我测试和验证LVL实现的最佳方式(从最终用户的角度来看),然后我必须将其实际发布到市场?目前,我在市场上发布了我的旧版非授权版应用程序,我所做的测试是在清单文件中使用相同的版本代码,我只是将更新的apk加载到模拟器上并进入我的手机(即新的apk没有上传到市场).对于偏执狂感到抱歉,但我宁愿完全删除LVL实现,而不是向有效用户提供未经许可的响应.
我有一个已经有超过2年的应用程序,并且只要有平板电脑就可以支持平板电脑.我有一台用于平板电脑测试的华硕Transformer平板电脑.在我进行更新之前,该应用与平板电脑设备兼容.对于我最近的一组更改,我在Android Manifest文件中只更改了应用版本号和应用版本字符串.其他一切与以前完全一样.但是,在更新后,当我在Google Play中搜索该应用时,该应用不会显示.当我在平板电脑上的浏览器中查看应用程序时,它显示"您的设备与此版本不兼容".
没有修改权限时,这个新版本究竟与平板电脑不兼容?当我查看我的应用程序时,在Android Developer Console内部,它表示支持2,673个设备,它表示排除了0个设备(这是正确的,零设备).好吧,如果这是真的,我怎么可能得到不兼容的消息?此外,当我查看支持的设备列表时,我的华硕平板电脑列在那里.
请注意,应用程序大小仅为1.19 MB,并且我实际上有2个可执行文件用于同一个应用程序,但另一个可执行文件专门用于Android 1.5及更低版本,其版本代码为0300800,因此它低于可执行文件的版本代码支持Android 1.6及更高版本(使用兼容包).
此外,当使用ADB连接到我的计算机时,我可以将应用程序直接加载到平板电脑上.我现在发现这个问题的唯一原因是因为我收到了几个平板电脑用户的电子邮件,他们说他们收到了与我相同的信息,除非他们有不同的平板电脑.
这是我的清单文件(同样,除了版本号之外它没有变化):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my_package"
android:versionCode="0400921"
android:versionName="9.2.1"
android:installLocation="auto">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<supports-screens android:anyDensity="true"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".App"
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=".Activity1" android:label="Activity1"></activity>
<more activities>
</application>
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8" />
Run Code Online (Sandbox Code Playgroud)
我有一个已经出现一段时间的应用程序,它允许使用Android 1.5及更高版本的设备运行该应用程序.我想现在将Fragments添加到我的应用程序,但兼容性库不包括对Android 1.5的支持.
我知道允许仍然使用Android 1.5的用户继续使用我的应用程序的唯一选项是创建和维护2个单独的APK,一个仅用于1.5,第二个用于1.6和更高版本.我发现这是一个可怕的选择,我宁愿不这样做.还有其他选择吗?如果有多个选项,哪个选项最好?如果我没有任何拥有Android 1.5的用户,我很乐意放弃它,但由于情况并非如此,我仍然必须支持它们.
我有一个Android应用程序,可以在应用程序的安装目录中将文本文件直接保存到手机上.我需要允许用户创建一个新的电子邮件,附加这个保存的文本文件.当我开始发送电子邮件的意图时,所有内容都会在Gmail中正确显示,但附件不会被发送.我对堆栈溢出的所有搜索似乎只涉及从SD卡附加图像文件.下面是我使用的代码.如果我做错了,请告诉我.
File myFile = new File(getFilesDir() + "/" + "someFile.txt");
FileOutputStream stream = null;
if( file != null )
{
steam = openFileOutput("someFile.txt", Context.MODE_WORLD_READABLE);
stream.write(some_data);
Uri uri = Uri.fromFile(myFile);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sendIntent.putExtra(Intent.EXTRA_TEXT, email_text);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
file.close();
startActivity(Intent.createChooser(sendIntent, "Email:"));
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过sendIntent.setType("application/octet-stream"); 但这并没有什么不同.我为什么文件没有附加并被发送而感到茫然.
有任何想法吗?
我创建了一个自定义AlertDialog来显示Spinner和一些EditText元素.当我选择菜单选项时,会启动此自定义AlertDialog.一切正常,直到我实际选择微调器来尝试选择一个项目,此时我得到了BadTokenException.我已经读过其他StackOverflow帖子,说类似的异常是尝试使用getApplicationContext()而不是传递Activity.this来显示diaglog的结果.我没有明确地将getApplicationContext()传递给与此AlertDialog相关的任何内容.
为了设置这个自定义AlertDiaglog,我创建了一个包含Spinner和EditText元素的布局文件,然后使AlertDialog使用该布局:
LayoutInflater inflater = (LayoutInflater)getApplication().getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout, (ViewGroup)findViewById(R.id.custom_layout_root));
spinner = (Spinner)layout.findViewById(R.id.custom_layout_spinner);
ArrayAdapter adap = ArrayAdapter.createFromResource(Activity.this, R.array.data, android.R.layout.simple_spinner_item);
adap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adap);
spinner.setOnItemSelectedListener(new SpinnerItemListener());
AlertDialog.Builder dialog = new AlertDialog.Builder(Activity.this);
dialog.setTitle("Title");
dialog.setPositiveButton("Ok", new Dialog.OnClickListener() ...
...
dialog.show();
Run Code Online (Sandbox Code Playgroud)
此代码都可以正常显示AlertDialog.但是,当我实际触摸Spinner时,我遇到以下问题:
Thread [<3> main] (Suspended (exception WindowManager$BadTokenException))
ViewRoot.handleMessage(Message) line: 1704
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4203
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 791
ZygoteInit.main(String[]) line: 549
NativeStart.main(String[]) line: not …Run Code Online (Sandbox Code Playgroud)